diff options
-rw-r--r-- | src/or/buffers.c | 3 | ||||
-rw-r--r-- | src/or/circuit.c | 9 | ||||
-rw-r--r-- | src/or/connection_edge.c | 56 | ||||
-rw-r--r-- | src/or/rendservice.c | 6 |
4 files changed, 15 insertions, 59 deletions
diff --git a/src/or/buffers.c b/src/or/buffers.c index aac3294625..5960eff2f7 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -487,8 +487,7 @@ int fetch_from_buf_socks(buf_t *buf, socks_request_t *req) { } memcpy(req->address,buf->mem+5,len); req->address[len] = 0; - memcpy(&req->port, buf->mem+5+len, 2); - req->port = ntohs(req->port); + req->port = ntohs(get_uint16(buf->mem+5+len)); buf_remove_from_front(buf, 5+len+2); return 1; default: /* unsupported */ diff --git a/src/or/circuit.c b/src/or/circuit.c index c92956182e..188d75fd80 100644 --- a/src/or/circuit.c +++ b/src/or/circuit.c @@ -1315,13 +1315,8 @@ int circuit_extend(cell_t *cell, circuit_t *circ) { return -1; } - memcpy(&circ->n_addr, cell->payload+RELAY_HEADER_SIZE, 4); - circ->n_addr = ntohl(circ->n_addr); - memcpy(&circ->n_port, cell->payload+RELAY_HEADER_SIZE+4, 2); - circ->n_port = ntohs(circ->n_port); - -// circ->n_addr = ntohl(*(uint32_t*)(cell->payload+RELAY_HEADER_SIZE)); -// circ->n_port = ntohs(*(uint16_t*)(cell->payload+RELAY_HEADER_SIZE+4)); + circ->n_addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE)); + circ->n_port = ntohs(get_uint16(cell->payload+RELAY_HEADER_SIZE+4)); n_conn = connection_twin_get_by_addr_port(circ->n_addr,circ->n_port); if(!n_conn || n_conn->type != CONN_TYPE_OR) { diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index f8b90557ec..77da7b211c 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -18,56 +18,21 @@ static uint32_t client_dns_lookup_entry(const char *address); static void client_dns_set_entry(const char *address, uint32_t val); void relay_header_pack(char *dest, const relay_header_t *src) { - uint16_t tmp; - - /* we have to do slow memcpy's here, because we screwed up - * and made our cell payload not word-aligned. we should fix - * this someday. - */ - *(uint8_t*)(dest) = src->command; - tmp = htons(src->recognized); - memcpy(dest+1, &tmp, 2); - - tmp = htons(src->stream_id); - memcpy(dest+3, &tmp, 2); - - memcpy(dest+5, src->integrity, 4); - - tmp = htons(src->length); - memcpy(dest+9, &tmp, 2); - -#if 0 - *(uint8_t*)(dest) = src->command; - *(uint16_t*)(dest+1) = htons(src->recognized); - *(uint16_t*)(dest+3) = htons(src->stream_id); + set_uint16(dest+1, htons(src->recognized)); + set_uint16(dest+3, htons(src->stream_id)); memcpy(dest+5, src->integrity, 4); - *(uint16_t*)(dest+9) = htons(src->length); -#endif + set_uint16(dest+9, htons(src->length)); } void relay_header_unpack(relay_header_t *dest, const char *src) { dest->command = *(uint8_t*)(src); - memcpy(&dest->recognized, src+1, 2); - dest->recognized = ntohs(dest->recognized); - - memcpy(&dest->stream_id, src+3, 2); - dest->stream_id = ntohs(dest->stream_id); - + dest->recognized = ntohs(get_uint16(src+1)); + dest->stream_id = ntohs(get_uint16(src+3)); memcpy(dest->integrity, src+5, 4); - - memcpy(&dest->length, src+9, 2); - dest->length = ntohs(dest->length); - -#if 0 - dest->command = *(uint8_t*)(src); - dest->recognized = ntohs(*(uint16_t*)(src+1)); - dest->stream_id = ntohs(*(uint16_t*)(src+3)); - memcpy(dest->integrity, src+5, 4); - dest->length = ntohs(*(uint16_t*)(src+9)); -#endif + dest->length = ntohs(get_uint16(src+9)); } /* mark and return -1 if there was an unexpected error with the conn, @@ -178,8 +143,7 @@ int connection_edge_end(connection_t *conn, char reason, crypt_path_t *cpath_lay payload[0] = reason; if(reason == END_STREAM_REASON_EXITPOLICY) { - uint32_t tmp = htonl(conn->addr); - memcpy(payload+1, &tmp, 4); + set_uint32(payload+1, htonl(conn->addr)); // *(uint32_t *)(payload+1) = htonl(conn->addr); payload_len += 4; } @@ -288,8 +252,7 @@ int connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, // log_fn(LOG_INFO,"Connected! Notifying application."); conn->state = AP_CONN_STATE_OPEN; if (rh.length >= 4) { - memcpy(&addr, cell->payload + RELAY_HEADER_SIZE, 4); - addr = ntohl(addr); + addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE)); client_dns_set_entry(conn->socks_request->address, addr); } log_fn(LOG_INFO,"'connected' received after %d seconds.", @@ -370,8 +333,7 @@ int connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, * we try a new exit node. * cell->payload+RELAY_HEADER_SIZE+1 holds the destination addr. */ - memcpy(&addr, cell->payload+RELAY_HEADER_SIZE+1, 4); - addr = ntohl(addr); + addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+1)); client_dns_set_entry(conn->socks_request->address, addr); /* conn->purpose is still set to general */ conn->state = AP_CONN_STATE_CIRCUIT_WAIT; diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 57e4ce17f4..bbe7a69ab5 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -29,7 +29,7 @@ typedef struct rend_service_t { /* Other fields */ crypto_pk_env_t *private_key; char service_id[REND_SERVICE_ID_LEN+1]; - char pk_digest[20]; + char pk_digest[DIGEST_LEN]; smartlist_t *intro_nodes; /* list of nicknames */ rend_service_descriptor_t *desc; } rend_service_t; @@ -600,8 +600,8 @@ int rend_services_init(void) { circ = NULL; found = 1; while ((circ = circuit_get_next_by_pk_and_purpose( - circ,service->pk_digest, - CIRCUIT_PURPOSE_S_ESTABLISH_INTRO))) { + circ,service->pk_digest, + CIRCUIT_PURPOSE_S_ESTABLISH_INTRO))) { assert(circ->cpath); if (circ->cpath->prev->addr == router->addr && circ->cpath->prev->port == router->or_port) { |