diff --git a/media/mtransport/nricectx.cpp b/media/mtransport/nricectx.cpp index 2710e97d3a5a0bf2055b9fe397230450fd1982cd..a64578aa864d2d1454f4534658227d623bb6ae61 100644 --- a/media/mtransport/nricectx.cpp +++ b/media/mtransport/nricectx.cpp @@ -116,7 +116,7 @@ const char kNrIceTransportTls[] = "tls"; static bool initialized = false; // Implement NSPR-based crypto algorithms -static int nr_crypto_nss_random_bytes(UCHAR *buf, int len) { +static int nr_crypto_nss_random_bytes(UCHAR *buf, size_t len) { UniquePK11SlotInfo slot(PK11_GetInternalSlot()); if (!slot) return R_INTERNAL; @@ -128,7 +128,7 @@ static int nr_crypto_nss_random_bytes(UCHAR *buf, int len) { return 0; } -static int nr_crypto_nss_hmac(UCHAR *key, int keyl, UCHAR *buf, int bufl, +static int nr_crypto_nss_hmac(UCHAR *key, size_t keyl, UCHAR *buf, size_t bufl, UCHAR *result) { CK_MECHANISM_TYPE mech = CKM_SHA_1_HMAC; PK11SlotInfo *slot = nullptr; @@ -180,7 +180,7 @@ static int nr_crypto_nss_hmac(UCHAR *key, int keyl, UCHAR *buf, int bufl, return err; } -static int nr_crypto_nss_md5(UCHAR *buf, int bufl, UCHAR *result) { +static int nr_crypto_nss_md5(UCHAR *buf, size_t bufl, UCHAR *result) { int err = R_INTERNAL; SECStatus rv; @@ -732,11 +732,11 @@ void NrIceCtx::internal_SetTimerAccelarator(int divider) { } void NrIceCtx::AccumulateStats(const NrIceStats& stats) { - nr_ice_accumulate_count(&(ctx_->stats.stun_retransmits), - stats.stun_retransmits); - nr_ice_accumulate_count(&(ctx_->stats.turn_401s), stats.turn_401s); - nr_ice_accumulate_count(&(ctx_->stats.turn_403s), stats.turn_403s); - nr_ice_accumulate_count(&(ctx_->stats.turn_438s), stats.turn_438s); + nr_accumulate_count(&(ctx_->stats.stun_retransmits), + stats.stun_retransmits); + nr_accumulate_count(&(ctx_->stats.turn_401s), stats.turn_401s); + nr_accumulate_count(&(ctx_->stats.turn_403s), stats.turn_403s); + nr_accumulate_count(&(ctx_->stats.turn_438s), stats.turn_438s); } NrIceStats NrIceCtx::Destroy() { diff --git a/media/mtransport/third_party/nICEr/nicer.gyp b/media/mtransport/third_party/nICEr/nicer.gyp index 114dfcb4dff06faad2b159c49cbf89003bb1b64b..166e60c61c4b85817836b415dd3d29777d639de5 100644 --- a/media/mtransport/third_party/nICEr/nicer.gyp +++ b/media/mtransport/third_party/nICEr/nicer.gyp @@ -187,6 +187,7 @@ [ 'OS == "win"', { 'defines' : [ 'WIN32', + '_WINSOCK_DEPRECATED_NO_WARNINGS', 'USE_ICE', 'USE_TURN', 'USE_RFC_3489_BACKWARDS_COMPATIBLE', diff --git a/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.c b/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.c index 088ebf04590169f1ef9ddb12bbd7d26f77219237..bc5a792810f07e3c969b34f9d40b05d4d0c0e438 100644 --- a/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.c +++ b/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.c @@ -37,21 +37,21 @@ static char *RCSSTRING __UNUSED__="$Id: nr_crypto.c,v 1.2 2008/04/28 17:59:01 ek #include <nr_api.h> #include "nr_crypto.h" -static int nr_ice_crypto_dummy_random_bytes(UCHAR *buf, int len) +static int nr_ice_crypto_dummy_random_bytes(UCHAR *buf, size_t len) { fprintf(stderr,"Need to define crypto API implementation\n"); exit(1); } -static int nr_ice_crypto_dummy_hmac_sha1(UCHAR *key, int key_l, UCHAR *buf, int buf_l, UCHAR digest[20]) +static int nr_ice_crypto_dummy_hmac_sha1(UCHAR *key, size_t key_l, UCHAR *buf, size_t buf_l, UCHAR digest[20]) { fprintf(stderr,"Need to define crypto API implementation\n"); exit(1); } -static int nr_ice_crypto_dummy_md5(UCHAR *buf, int buf_l, UCHAR digest[16]) +static int nr_ice_crypto_dummy_md5(UCHAR *buf, size_t buf_l, UCHAR digest[16]) { fprintf(stderr,"Need to define crypto API implementation\n"); diff --git a/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.h b/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.h index 4c71786f056bf90428758e2ff5c3739473ea10d8..5fbbd8f09724737e2097be2c3eaac493290bcdd6 100644 --- a/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.h +++ b/media/mtransport/third_party/nICEr/src/crypto/nr_crypto.h @@ -37,9 +37,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. typedef struct nr_ice_crypto_vtbl_ { - int (*random_bytes)(UCHAR *buf, int len); - int (*hmac_sha1)(UCHAR *key, int key_l, UCHAR *buf, int buf_l, UCHAR digest[20]); - int (*md5)(UCHAR *buf, int buf_l, UCHAR digest[16]); + int (*random_bytes)(UCHAR *buf, size_t len); + int (*hmac_sha1)(UCHAR *key, size_t key_l, UCHAR *buf, size_t buf_l, UCHAR digest[20]); + int (*md5)(UCHAR *buf, size_t buf_l, UCHAR digest[16]); } nr_ice_crypto_vtbl; extern nr_ice_crypto_vtbl *nr_crypto_vtbl; diff --git a/media/mtransport/third_party/nICEr/src/ice/ice_candidate.c b/media/mtransport/third_party/nICEr/src/ice/ice_candidate.c index 445dcb529021b5e0d824aabf006dac59250a3c1f..7bebf9ab7c3d475d3d15faa4a5c73de2e5bf6efc 100644 --- a/media/mtransport/third_party/nICEr/src/ice/ice_candidate.c +++ b/media/mtransport/third_party/nICEr/src/ice/ice_candidate.c @@ -323,14 +323,14 @@ int nr_ice_candidate_destroy(nr_ice_candidate **candp) case RELAYED: // record stats back to the ice ctx on destruction if (cand->u.relayed.turn) { - nr_ice_accumulate_count(&(cand->ctx->stats.turn_401s), cand->u.relayed.turn->cnt_401s); - nr_ice_accumulate_count(&(cand->ctx->stats.turn_403s), cand->u.relayed.turn->cnt_403s); - nr_ice_accumulate_count(&(cand->ctx->stats.turn_438s), cand->u.relayed.turn->cnt_438s); + nr_accumulate_count(&(cand->ctx->stats.turn_401s), cand->u.relayed.turn->cnt_401s); + nr_accumulate_count(&(cand->ctx->stats.turn_403s), cand->u.relayed.turn->cnt_403s); + nr_accumulate_count(&(cand->ctx->stats.turn_438s), cand->u.relayed.turn->cnt_438s); nr_turn_stun_ctx* stun_ctx; stun_ctx = STAILQ_FIRST(&cand->u.relayed.turn->stun_ctxs); while (stun_ctx) { - nr_ice_accumulate_count(&(cand->ctx->stats.stun_retransmits), stun_ctx->stun->retransmit_ct); + nr_accumulate_count(&(cand->ctx->stats.stun_retransmits), stun_ctx->stun->retransmit_ct); stun_ctx = STAILQ_NEXT(stun_ctx, entry); } @@ -380,7 +380,9 @@ static int nr_ice_get_foundation(nr_ice_ctx *ctx,nr_ice_candidate *cand) while(foundation){ if(nr_transport_addr_cmp(&cand->base,&foundation->addr,NR_TRANSPORT_ADDR_CMP_MODE_ADDR)) goto next; - if(cand->type != foundation->type) + // cast necessary because there is no guarantee that enum is signed. + // foundation->type should probably match nr_ice_candidate_type + if((int)cand->type != foundation->type) goto next; if(cand->stun_server != foundation->stun_server) goto next; diff --git a/media/mtransport/third_party/nICEr/src/ice/ice_candidate_pair.c b/media/mtransport/third_party/nICEr/src/ice/ice_candidate_pair.c index 0ac64353a8c0df4757403c64b24637658632e288..1ecfaf42fe202c315f3707bf780c2c7161e02212 100644 --- a/media/mtransport/third_party/nICEr/src/ice/ice_candidate_pair.c +++ b/media/mtransport/third_party/nICEr/src/ice/ice_candidate_pair.c @@ -154,7 +154,7 @@ int nr_ice_candidate_pair_destroy(nr_ice_cand_pair **pairp) // record stats back to the ice ctx on destruction if (pair->stun_client) { - nr_ice_accumulate_count(&(pair->local->ctx->stats.stun_retransmits), pair->stun_client->retransmit_ct); + nr_accumulate_count(&(pair->local->ctx->stats.stun_retransmits), pair->stun_client->retransmit_ct); } RFREE(pair->as_string); @@ -357,6 +357,12 @@ static void nr_ice_candidate_pair_stun_cb(NR_SOCKET s, int how, void *cb_arg) done: _status=0; abort: + if (_status) { + // cb doesn't return anything, but we should probably log that we aborted + // This also quiets the unused variable warnings. + r_log(LOG_ICE,LOG_DEBUG,"ICE-PEER(%s)/STREAM(%s)/CAND-PAIR(%s): STUN cb pair addr = %s abort with status: %d", + pair->pctx->label,pair->local->stream->label,pair->codeword,pair->as_string, _status); + } return; } @@ -640,6 +646,12 @@ void nr_ice_candidate_pair_restart_stun_nominated_cb(NR_SOCKET s, int how, void _status=0; abort: + if (_status) { + // cb doesn't return anything, but we should probably log that we aborted + // This also quiets the unused variable warnings. + r_log(LOG_ICE,LOG_DEBUG,"ICE-PEER(%s)/STREAM(%s)/CAND-PAIR(%s)/COMP(%d): STUN nominated cb pair as nominated: %s abort with status: %d", + pair->pctx->label,pair->local->stream->label,pair->codeword,pair->remote->component->component_id,pair->as_string, _status); + } return; } diff --git a/media/mtransport/third_party/nICEr/src/ice/ice_component.c b/media/mtransport/third_party/nICEr/src/ice/ice_component.c index a47bd30bdc2b1a9af22cb93bcbf3ebaeefa758c1..e5f265c0fb2d1f5806e00025a4c5c7b6689a7249 100644 --- a/media/mtransport/third_party/nICEr/src/ice/ice_component.c +++ b/media/mtransport/third_party/nICEr/src/ice/ice_component.c @@ -51,10 +51,16 @@ static char *RCSSTRING __UNUSED__="$Id: ice_component.c,v 1.2 2008/04/28 17:59:0 #include "nr_crypto.h" #include "r_time.h" +static void nr_ice_component_refresh_consent_cb(NR_SOCKET s, int how, void *cb_arg); static int nr_ice_component_stun_server_default_cb(void *cb_arg,nr_stun_server_ctx *stun_ctx,nr_socket *sock, nr_stun_server_request *req, int *dont_free, int *error); static int nr_ice_pre_answer_request_destroy(nr_ice_pre_answer_request **parp); +int nr_ice_component_can_candidate_addr_pair(nr_transport_addr *local, nr_transport_addr *remote); +int nr_ice_component_can_candidate_tcptype_pair(nr_socket_tcp_type left, nr_socket_tcp_type right); +void nr_ice_component_consent_calc_consent_timer(nr_ice_component *comp); void nr_ice_component_consent_schedule_consent_timer(nr_ice_component *comp); -void nr_ice_component_consent_destroy(nr_ice_component *comp); +int nr_ice_component_refresh_consent(nr_stun_client_ctx *ctx, NR_async_cb finished_cb, void *cb_arg); +int nr_ice_component_setup_consent(nr_ice_component *comp); +int nr_ice_pre_answer_enqueue(nr_ice_component *comp, nr_socket *sock, nr_stun_server_request *req, int *dont_free); /* This function takes ownership of the contents of req (but not req itself) */ static int nr_ice_pre_answer_request_create(nr_transport_addr *dst, nr_stun_server_request *req, nr_ice_pre_answer_request **parp) @@ -813,7 +819,7 @@ static int nr_ice_component_handle_triggered_check(nr_ice_component *comp, nr_ic _status=0; abort: - return(r); + return(_status); } /* Section 7.2.1 */ diff --git a/media/mtransport/third_party/nICEr/src/ice/ice_component.h b/media/mtransport/third_party/nICEr/src/ice/ice_component.h index 014119e13c3d5d1314b8437138ecea6c849c3947..3dc84cfe33e0b8699d8149a40591d2d43d971fd1 100644 --- a/media/mtransport/third_party/nICEr/src/ice/ice_component.h +++ b/media/mtransport/third_party/nICEr/src/ice/ice_component.h @@ -98,6 +98,7 @@ int nr_ice_component_set_failed(nr_ice_component *comp); int nr_ice_component_finalize(nr_ice_component *lcomp, nr_ice_component *rcomp); int nr_ice_component_insert_pair(nr_ice_component *pcomp, nr_ice_cand_pair *pair); int nr_ice_component_get_default_candidate(nr_ice_component *comp, nr_ice_candidate **candp, int ip_version); +void nr_ice_component_consent_destroy(nr_ice_component *comp); void nr_ice_component_refresh_consent_now(nr_ice_component *comp); void nr_ice_component_disconnected(nr_ice_component *comp); diff --git a/media/mtransport/third_party/nICEr/src/ice/ice_ctx.c b/media/mtransport/third_party/nICEr/src/ice/ice_ctx.c index 41a854f092713f5ecc0fe5d77168a4e0656a1333..11f38abd524a095d4326386a7ecaae2c02797e2c 100644 --- a/media/mtransport/third_party/nICEr/src/ice/ice_ctx.c +++ b/media/mtransport/third_party/nICEr/src/ice/ice_ctx.c @@ -689,7 +689,7 @@ static int nr_ice_get_default_local_address(nr_ice_ctx *ctx, int ip_version, nr_ if (i == addr_ct) { if ((r=nr_transport_addr_copy(&addrp->addr, &default_addr))) ABORT(r); - strlcpy(addrp->addr.ifname, "default route", sizeof(addrp->addr.ifname)); + (void)strlcpy(addrp->addr.ifname, "default route", sizeof(addrp->addr.ifname)); } _status=0; @@ -914,7 +914,7 @@ int nr_ice_get_global_attributes(nr_ice_ctx *ctx,char ***attrsp, int *attrctp) static int nr_ice_random_string(char *str, int len) { unsigned char bytes[100]; - int needed; + size_t needed; int r,_status; if(len%2) ABORT(R_BAD_ARGS); @@ -1087,17 +1087,3 @@ int nr_ice_get_new_ice_pwd(char** pwd) } return(_status); } - -#ifndef UINT2_MAX -#define UINT2_MAX ((UINT2)(65535U)) -#endif - -void nr_ice_accumulate_count(UINT2* orig_count, UINT2 new_count) - { - if (UINT2_MAX - new_count < *orig_count) { - // don't rollover, just stop accumulating at MAX value - *orig_count = UINT2_MAX; - } else { - *orig_count += new_count; - } - } diff --git a/media/mtransport/third_party/nICEr/src/ice/ice_ctx.h b/media/mtransport/third_party/nICEr/src/ice/ice_ctx.h index 1ac2386e3227fc472ada17b745662a904be2412d..8906fce868665c3b5e220f5f848c695597fcfb8d 100644 --- a/media/mtransport/third_party/nICEr/src/ice/ice_ctx.h +++ b/media/mtransport/third_party/nICEr/src/ice/ice_ctx.h @@ -199,8 +199,6 @@ int nr_ice_ctx_set_trickle_cb(nr_ice_ctx *ctx, nr_ice_trickle_candidate_cb cb, v int nr_ice_ctx_hide_candidate(nr_ice_ctx *ctx, nr_ice_candidate *cand); int nr_ice_get_new_ice_ufrag(char** ufrag); int nr_ice_get_new_ice_pwd(char** pwd); -// accumulate a count without worrying about rollover -void nr_ice_accumulate_count(UINT2* orig_count, UINT2 new_count); #define NR_ICE_MAX_ATTRIBUTE_SIZE 256 diff --git a/media/mtransport/third_party/nICEr/src/ice/ice_media_stream.c b/media/mtransport/third_party/nICEr/src/ice/ice_media_stream.c index 7c96ce50ddc6216bcd7dd1b5231010853f7e2241..82ec9d3a4ea6e5d69fcdb7a20c9af42b25fe0f15 100644 --- a/media/mtransport/third_party/nICEr/src/ice/ice_media_stream.c +++ b/media/mtransport/third_party/nICEr/src/ice/ice_media_stream.c @@ -376,6 +376,12 @@ static void nr_ice_media_stream_check_timer_cb(NR_SOCKET s, int h, void *cb_arg) _status=0; abort: + if (_status) { + // cb doesn't return anything, but we should probably log that we aborted + // This also quiets the unused variable warnings. + r_log(LOG_ICE,LOG_DEBUG,"ICE-PEER(%s): check timer cb for media stream %s abort with status: %d", + stream->pctx->label,stream->label, _status); + } return; } @@ -564,8 +570,8 @@ int nr_ice_media_stream_set_state(nr_ice_media_stream *str, int state) if (state == str->ice_state) return 0; - assert(state < sizeof(nr_ice_media_stream_states)/sizeof(char *)); - assert(str->ice_state < sizeof(nr_ice_media_stream_states)/sizeof(char *)); + assert((size_t)state < sizeof(nr_ice_media_stream_states)/sizeof(char *)); + assert((size_t)str->ice_state < sizeof(nr_ice_media_stream_states)/sizeof(char *)); r_log(LOG_ICE,LOG_DEBUG,"ICE-PEER(%s): stream %s state %s->%s", str->pctx->label,str->label, diff --git a/media/mtransport/third_party/nICEr/src/net/nr_socket.h b/media/mtransport/third_party/nICEr/src/net/nr_socket.h index 95f62e413e5016cefeb2faf45babde519f9dd272..8e7fbc6b4b8e541ec029dfbc4fd8be8218f4dadd 100644 --- a/media/mtransport/third_party/nICEr/src/net/nr_socket.h +++ b/media/mtransport/third_party/nICEr/src/net/nr_socket.h @@ -49,6 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifdef __cplusplus #define restrict #elif defined(WIN32) +/* Undef before defining to avoid a compiler warning */ +#undef restrict #define restrict __restrict #endif diff --git a/media/mtransport/third_party/nICEr/src/net/transport_addr.c b/media/mtransport/third_party/nICEr/src/net/transport_addr.c index a84b0ddf0dca1a6d913600270b62616f05d267cd..c05673b78d3d7c867057595aa17900485662a4ca 100644 --- a/media/mtransport/third_party/nICEr/src/net/transport_addr.c +++ b/media/mtransport/third_party/nICEr/src/net/transport_addr.c @@ -537,7 +537,7 @@ int nr_transport_addr_get_private_addr_range(nr_transport_addr *addr) case NR_IPV4: { UINT4 ip = ntohl(addr->u.addr4.sin_addr.s_addr); - for (int i=0; i<(sizeof(nr_private_ipv4_addrs)/sizeof(nr_transport_addr_mask)); i++) { + for (size_t i=0; i<(sizeof(nr_private_ipv4_addrs)/sizeof(nr_transport_addr_mask)); i++) { if ((ip & nr_private_ipv4_addrs[i].mask) == nr_private_ipv4_addrs[i].addr) return i + 1; } diff --git a/media/mtransport/third_party/nICEr/src/net/transport_addr_reg.c b/media/mtransport/third_party/nICEr/src/net/transport_addr_reg.c index 6a8a64bb90a444566cfc6c06755de101feef7bff..221d1ffc43e417ac46548859a166e0f596043fd5 100644 --- a/media/mtransport/third_party/nICEr/src/net/transport_addr_reg.c +++ b/media/mtransport/third_party/nICEr/src/net/transport_addr_reg.c @@ -114,8 +114,9 @@ nr_reg_get_transport_addr(NR_registry prefix, int keep, nr_transport_addr *addr) if ((r=nr_str_port_to_transport_addr(address?address:"0.0.0.0", port, p, addr))) ABORT(r); - if (ifname) - strlcpy(addr->ifname, ifname, sizeof(addr->ifname)); + if (ifname) { + (void)strlcpy(addr->ifname, ifname, sizeof(addr->ifname)); + } _status=0; abort: diff --git a/media/mtransport/third_party/nICEr/src/stun/addrs.c b/media/mtransport/third_party/nICEr/src/stun/addrs.c index f2c511445455df981f8b848d212e55ac0254e830..4f2f19b2137fe6046791c88f02407cf0037d2ecf 100644 --- a/media/mtransport/third_party/nICEr/src/stun/addrs.c +++ b/media/mtransport/third_party/nICEr/src/stun/addrs.c @@ -327,7 +327,7 @@ stun_getifaddrs(nr_local_addr addrs[], int maxaddrs, int *count) addrs[*count].interface.type = NR_INTERFACE_TYPE_UNKNOWN; addrs[*count].interface.estimated_speed = 0; #endif - strlcpy(addrs[*count].addr.ifname, if_addr->ifa_name, sizeof(addrs[*count].addr.ifname)); + (void)strlcpy(addrs[*count].addr.ifname, if_addr->ifa_name, sizeof(addrs[*count].addr.ifname)); ++(*count); } break; diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_build.c b/media/mtransport/third_party/nICEr/src/stun/stun_build.c index b029501a721c3af95b9f242aaa5e3a4320025dba..ec30f82e15b40ba132e31a3ddcd78a5a4d97ccfd 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_build.c +++ b/media/mtransport/third_party/nICEr/src/stun/stun_build.c @@ -308,7 +308,7 @@ nr_stun_compute_lt_message_integrity_password(const char *username, const char * Data *password, Data *hmac_key) { char digest_input[1000]; - int i; + size_t i; int r, _status; size_t len; diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.c b/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.c index fd9d0c21f6ca4f3f516a605bba693091e82baacb..ce545c38f54aad92c552356c878677743a9359b5 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.c +++ b/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.c @@ -253,7 +253,7 @@ static void nr_stun_client_timer_expired_cb(NR_SOCKET s, int b, void *cb_arg) ABORT(R_NOT_PERMITTED); // track retransmits for ice telemetry - nr_ice_accumulate_count(&(ctx->retransmit_ct), 1); + nr_accumulate_count(&(ctx->retransmit_ct), 1); /* as a side effect will reset the timer */ nr_stun_client_send_request(ctx); @@ -269,6 +269,12 @@ static void nr_stun_client_timer_expired_cb(NR_SOCKET s, int b, void *cb_arg) nr_stun_client_fire_finished_cb(ctx); } + if (_status) { + // cb doesn't return anything, but we should probably log that we aborted + // This also quiets the unused variable warnings. + r_log(NR_LOG_STUN,LOG_DEBUG,"STUN-CLIENT(%s): Timer expired cb abort with status: %d", + ctx->label, _status); + } return; } diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h b/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h index 93abbded04bb826664061b73341efb7b516055d7..53f5db2113b8597cd274e156fd1dc11e2b5ebfa1 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h +++ b/media/mtransport/third_party/nICEr/src/stun/stun_client_ctx.h @@ -167,7 +167,7 @@ struct nr_stun_client_ctx_ { char *nonce; char *realm; void *timer_handle; - int request_ct; + UINT2 request_ct; UINT2 retransmit_ct; UINT4 rto_ms; /* retransmission time out */ double retransmission_backoff_factor; diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_codec.c b/media/mtransport/third_party/nICEr/src/stun/stun_codec.c index 93927c8823c3a45521035fad98a939fcea7e5fa6..68bcfa7767b32c02b536e5a64a49e891244c5c0f 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_codec.c +++ b/media/mtransport/third_party/nICEr/src/stun/stun_codec.c @@ -62,29 +62,29 @@ static int nr_stun_find_attr_info(UINT2 type, nr_stun_attr_info **info); static int nr_stun_fix_attribute_ordering(nr_stun_message *msg); -static int nr_stun_encode_htons(UINT2 data, int buflen, UCHAR *buf, int *offset); -static int nr_stun_encode_htonl(UINT4 data, int buflen, UCHAR *buf, int *offset); -static int nr_stun_encode_htonll(UINT8 data, int buflen, UCHAR *buf, int *offset); -static int nr_stun_encode(UCHAR *data, int length, int buflen, UCHAR *buf, int *offset); - -static int nr_stun_decode_htons(UCHAR *buf, int buflen, int *offset, UINT2 *data); -static int nr_stun_decode_htonl(UCHAR *buf, int buflen, int *offset, UINT4 *data); -static int nr_stun_decode_htonll(UCHAR *buf, int buflen, int *offset, UINT8 *data); -static int nr_stun_decode(int length, UCHAR *buf, int buflen, int *offset, UCHAR *data); - -static int nr_stun_attr_string_illegal(nr_stun_attr_info *attr_info, int len, void *data, int max_bytes, int max_chars); - -static int nr_stun_attr_error_code_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data); -static int nr_stun_attr_nonce_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data); -static int nr_stun_attr_realm_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data); -static int nr_stun_attr_server_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data); -static int nr_stun_attr_username_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data); +static int nr_stun_encode_htons(UINT2 data, size_t buflen, UCHAR *buf, size_t *offset); +static int nr_stun_encode_htonl(UINT4 data, size_t buflen, UCHAR *buf, size_t *offset); +static int nr_stun_encode_htonll(UINT8 data, size_t buflen, UCHAR *buf, size_t *offset); +static int nr_stun_encode(UCHAR *data, size_t length, size_t buflen, UCHAR *buf, size_t *offset); + +static int nr_stun_decode_htons(UCHAR *buf, size_t buflen, size_t *offset, UINT2 *data); +static int nr_stun_decode_htonl(UCHAR *buf, size_t buflen, size_t *offset, UINT4 *data); +static int nr_stun_decode_htonll(UCHAR *buf, size_t buflen, size_t *offset, UINT8 *data); +static int nr_stun_decode(size_t length, UCHAR *buf, size_t buflen, size_t *offset, UCHAR *data); + +static int nr_stun_attr_string_illegal(nr_stun_attr_info *attr_info, size_t len, void *data, size_t max_bytes, size_t max_chars); + +static int nr_stun_attr_error_code_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data); +static int nr_stun_attr_nonce_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data); +static int nr_stun_attr_realm_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data); +static int nr_stun_attr_server_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data); +static int nr_stun_attr_username_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data); static int -nr_stun_attr_codec_fingerprint_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data); +nr_stun_attr_codec_fingerprint_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data); int -nr_stun_encode_htons(UINT2 data, int buflen, UCHAR *buf, int *offset) +nr_stun_encode_htons(UINT2 data, size_t buflen, UCHAR *buf, size_t *offset) { UINT2 d = htons(data); @@ -100,7 +100,7 @@ nr_stun_encode_htons(UINT2 data, int buflen, UCHAR *buf, int *offset) } int -nr_stun_encode_htonl(UINT4 data, int buflen, UCHAR *buf, int *offset) +nr_stun_encode_htonl(UINT4 data, size_t buflen, UCHAR *buf, size_t *offset) { UINT4 d = htonl(data); @@ -116,7 +116,7 @@ nr_stun_encode_htonl(UINT4 data, int buflen, UCHAR *buf, int *offset) } int -nr_stun_encode_htonll(UINT8 data, int buflen, UCHAR *buf, int *offset) +nr_stun_encode_htonll(UINT8 data, size_t buflen, UCHAR *buf, size_t *offset) { UINT8 d = nr_htonll(data); @@ -132,7 +132,7 @@ nr_stun_encode_htonll(UINT8 data, int buflen, UCHAR *buf, int *offset) } int -nr_stun_encode(UCHAR *data, int length, int buflen, UCHAR *buf, int *offset) +nr_stun_encode(UCHAR *data, size_t length, size_t buflen, UCHAR *buf, size_t *offset) { if (*offset + length > buflen) { r_log(NR_LOG_STUN, LOG_WARNING, "Attempted buffer overrun: %d + %d > %d", *offset, length, buflen); @@ -147,7 +147,7 @@ nr_stun_encode(UCHAR *data, int length, int buflen, UCHAR *buf, int *offset) int -nr_stun_decode_htons(UCHAR *buf, int buflen, int *offset, UINT2 *data) +nr_stun_decode_htons(UCHAR *buf, size_t buflen, size_t *offset, UINT2 *data) { UINT2 d; @@ -164,7 +164,7 @@ nr_stun_decode_htons(UCHAR *buf, int buflen, int *offset, UINT2 *data) } int -nr_stun_decode_htonl(UCHAR *buf, int buflen, int *offset, UINT4 *data) +nr_stun_decode_htonl(UCHAR *buf, size_t buflen, size_t *offset, UINT4 *data) { UINT4 d; @@ -181,7 +181,7 @@ nr_stun_decode_htonl(UCHAR *buf, int buflen, int *offset, UINT4 *data) } int -nr_stun_decode_htonll(UCHAR *buf, int buflen, int *offset, UINT8 *data) +nr_stun_decode_htonll(UCHAR *buf, size_t buflen, size_t *offset, UINT8 *data) { UINT8 d; @@ -198,7 +198,7 @@ nr_stun_decode_htonll(UCHAR *buf, int buflen, int *offset, UINT8 *data) } int -nr_stun_decode(int length, UCHAR *buf, int buflen, int *offset, UCHAR *data) +nr_stun_decode(size_t length, UCHAR *buf, size_t buflen, size_t *offset, UCHAR *data) { if (*offset + length > buflen) { r_log(NR_LOG_STUN, LOG_WARNING, "Attempted buffer overrun: %d + %d > %d", *offset, length, buflen); @@ -237,7 +237,7 @@ nr_count_utf8_code_points_without_validation(const char *s) { } int -nr_stun_attr_string_illegal(nr_stun_attr_info *attr_info, int len, void *data, int max_bytes, int max_chars) +nr_stun_attr_string_illegal(nr_stun_attr_info *attr_info, size_t len, void *data, size_t max_bytes, size_t max_chars) { int _status; char *s = data; @@ -248,12 +248,10 @@ nr_stun_attr_string_illegal(nr_stun_attr_info *attr_info, int len, void *data, i ABORT(R_FAILED); } - if (max_chars >= 0) { - nchars = nr_count_utf8_code_points_without_validation(s); - if (nchars > max_chars) { - r_log(NR_LOG_STUN, LOG_WARNING, "%s is too large: %zd characters", attr_info->name, nchars); - ABORT(R_FAILED); - } + nchars = nr_count_utf8_code_points_without_validation(s); + if (nchars > max_chars) { + r_log(NR_LOG_STUN, LOG_WARNING, "%s is too large: %zd characters", attr_info->name, nchars); + ABORT(R_FAILED); } _status = 0; @@ -262,7 +260,7 @@ nr_stun_attr_string_illegal(nr_stun_attr_info *attr_info, int len, void *data, i } int -nr_stun_attr_error_code_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data) +nr_stun_attr_error_code_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data) { int r,_status; nr_stun_attr_error_code *ec = data; @@ -279,25 +277,25 @@ nr_stun_attr_error_code_illegal(nr_stun_attr_info *attr_info, int attrlen, void } int -nr_stun_attr_nonce_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data) +nr_stun_attr_nonce_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data) { return nr_stun_attr_string_illegal(attr_info, attrlen, data, NR_STUN_MAX_NONCE_BYTES, NR_STUN_MAX_NONCE_CHARS); } int -nr_stun_attr_realm_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data) +nr_stun_attr_realm_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data) { return nr_stun_attr_string_illegal(attr_info, attrlen, data, NR_STUN_MAX_REALM_BYTES, NR_STUN_MAX_REALM_CHARS); } int -nr_stun_attr_server_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data) +nr_stun_attr_server_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data) { return nr_stun_attr_string_illegal(attr_info, attrlen, data, NR_STUN_MAX_SERVER_BYTES, NR_STUN_MAX_SERVER_CHARS); } int -nr_stun_attr_username_illegal(nr_stun_attr_info *attr_info, int attrlen, void *data) +nr_stun_attr_username_illegal(nr_stun_attr_info *attr_info, size_t attrlen, void *data) { return nr_stun_attr_string_illegal(attr_info, attrlen, data, NR_STUN_MAX_USERNAME_BYTES, -1); } @@ -310,7 +308,7 @@ nr_stun_attr_codec_UCHAR_print(nr_stun_attr_info *attr_info, char *msg, void *da } static int -nr_stun_attr_codec_UCHAR_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_UCHAR_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int start = offset; UINT4 tmp = *((UCHAR *)data); @@ -327,7 +325,7 @@ nr_stun_attr_codec_UCHAR_encode(nr_stun_attr_info *attr_info, void *data, int of } static int -nr_stun_attr_codec_UCHAR_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_UCHAR_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { UINT4 tmp; @@ -359,7 +357,7 @@ nr_stun_attr_codec_UINT4_print(nr_stun_attr_info *attr_info, char *msg, void *da } static int -nr_stun_attr_codec_UINT4_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_UINT4_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int start = offset; @@ -374,7 +372,7 @@ nr_stun_attr_codec_UINT4_encode(nr_stun_attr_info *attr_info, void *data, int of } static int -nr_stun_attr_codec_UINT4_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_UINT4_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { if (attrlen != sizeof(UINT4)) { r_log(NR_LOG_STUN, LOG_WARNING, "Integer is illegal size: %d", attrlen); @@ -402,7 +400,7 @@ nr_stun_attr_codec_UINT8_print(nr_stun_attr_info *attr_info, char *msg, void *da } static int -nr_stun_attr_codec_UINT8_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_UINT8_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int start = offset; @@ -417,7 +415,7 @@ nr_stun_attr_codec_UINT8_encode(nr_stun_attr_info *attr_info, void *data, int of } static int -nr_stun_attr_codec_UINT8_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_UINT8_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { if (attrlen != sizeof(UINT8)) { r_log(NR_LOG_STUN, LOG_WARNING, "Integer is illegal size: %d", attrlen); @@ -445,7 +443,7 @@ nr_stun_attr_codec_addr_print(nr_stun_attr_info *attr_info, char *msg, void *dat } static int -nr_stun_attr_codec_addr_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_addr_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int r,_status; int start = offset; @@ -491,7 +489,7 @@ nr_stun_attr_codec_addr_encode(nr_stun_attr_info *attr_info, void *data, int off } static int -nr_stun_attr_codec_addr_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_addr_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int _status; UCHAR pad; @@ -561,7 +559,7 @@ nr_stun_attr_codec_data_print(nr_stun_attr_info *attr_info, char *msg, void *dat } static int -nr_stun_attr_codec_data_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_data_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { nr_stun_attr_data *d = data; int start = offset; @@ -577,7 +575,7 @@ nr_stun_attr_codec_data_encode(nr_stun_attr_info *attr_info, void *data, int off } static int -nr_stun_attr_codec_data_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_data_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int _status; nr_stun_attr_data *result = data; @@ -617,7 +615,7 @@ nr_stun_attr_codec_error_code_print(nr_stun_attr_info *attr_info, char *msg, voi } static int -nr_stun_attr_codec_error_code_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_error_code_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { nr_stun_attr_error_code *error_code = data; int start = offset; @@ -640,14 +638,14 @@ nr_stun_attr_codec_error_code_encode(nr_stun_attr_info *attr_info, void *data, i } static int -nr_stun_attr_codec_error_code_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_error_code_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int _status; nr_stun_attr_error_code *result = data; UCHAR pad[2]; UCHAR class; UCHAR number; - int size_reason; + size_t size_reason; if (nr_stun_decode(2, buf, buflen, &offset, pad) || nr_stun_decode(1, buf, buflen, &offset, &class) @@ -690,7 +688,7 @@ nr_stun_attr_codec_fingerprint_print(nr_stun_attr_info *attr_info, char *msg, vo } static int -nr_stun_attr_codec_fingerprint_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_fingerprint_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { UINT4 checksum; nr_stun_attr_fingerprint *fingerprint = data; @@ -716,12 +714,12 @@ nr_stun_attr_codec_fingerprint_encode(nr_stun_attr_info *attr_info, void *data, } static int -nr_stun_attr_codec_fingerprint_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_fingerprint_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int r,_status; nr_stun_attr_fingerprint *fingerprint = data; nr_stun_message_header *header = (nr_stun_message_header*)buf; - int length; + size_t length; UINT4 checksum; if ((r=nr_stun_attr_codec_UINT4.decode(attr_info, attrlen, buf, offset, buflen, &fingerprint->checksum))) @@ -773,7 +771,7 @@ nr_stun_attr_codec_flag_print(nr_stun_attr_info *attr_info, char *msg, void *dat } static int -nr_stun_attr_codec_flag_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_flag_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int start = offset; @@ -787,7 +785,7 @@ nr_stun_attr_codec_flag_encode(nr_stun_attr_info *attr_info, void *data, int off } static int -nr_stun_attr_codec_flag_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_flag_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { if (attrlen != 0) { r_log(NR_LOG_STUN, LOG_WARNING, "Illegal flag length: %d", attrlen); @@ -844,7 +842,7 @@ nr_stun_compute_message_integrity(UCHAR *buf, int offset, UCHAR *password, int p } static int -nr_stun_attr_codec_message_integrity_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_message_integrity_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int start = offset; nr_stun_attr_message_integrity *integrity = data; @@ -863,7 +861,7 @@ nr_stun_attr_codec_message_integrity_encode(nr_stun_attr_info *attr_info, void * } static int -nr_stun_attr_codec_message_integrity_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_message_integrity_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int _status; int start; @@ -909,7 +907,7 @@ nr_stun_attr_codec nr_stun_attr_codec_message_integrity = { }; static int -nr_stun_attr_codec_noop_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_noop_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { return SKIP_ATTRIBUTE_DECODE; } @@ -930,7 +928,7 @@ nr_stun_attr_codec_quoted_string_print(nr_stun_attr_info *attr_info, char *msg, } static int -nr_stun_attr_codec_quoted_string_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_quoted_string_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { //TODO: !nn! syntax check, conversion if not quoted already? //We'll just restrict this in the API -- EKR @@ -938,7 +936,7 @@ nr_stun_attr_codec_quoted_string_encode(nr_stun_attr_info *attr_info, void *data } static int -nr_stun_attr_codec_quoted_string_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_quoted_string_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { //TODO: !nn! I don't see any need to unquote this but we may //find one later -- EKR @@ -961,7 +959,7 @@ nr_stun_attr_codec_string_print(nr_stun_attr_info *attr_info, char *msg, void *d } static int -nr_stun_attr_codec_string_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_string_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int start = offset; char *str = data; @@ -978,7 +976,7 @@ nr_stun_attr_codec_string_encode(nr_stun_attr_info *attr_info, void *data, int o } static int -nr_stun_attr_codec_string_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_string_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int _status; char *result = data; @@ -1033,7 +1031,7 @@ nr_stun_attr_codec_unknown_attributes_print(nr_stun_attr_info *attr_info, char * } static int -nr_stun_attr_codec_unknown_attributes_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_unknown_attributes_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { int _status; int start = offset; @@ -1063,7 +1061,7 @@ nr_stun_attr_codec_unknown_attributes_encode(nr_stun_attr_info *attr_info, void } static int -nr_stun_attr_codec_unknown_attributes_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_unknown_attributes_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int _status; nr_stun_attr_unknown_attributes *unknown_attributes = data; @@ -1112,7 +1110,7 @@ nr_stun_attr_codec_xor_mapped_address_print(nr_stun_attr_info *attr_info, char * } static int -nr_stun_attr_codec_xor_mapped_address_encode(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen) +nr_stun_attr_codec_xor_mapped_address_encode(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen) { nr_stun_attr_xor_mapped_address *xor_mapped_address = data; nr_stun_message_header *header = (nr_stun_message_header*)buf; @@ -1137,7 +1135,7 @@ nr_stun_attr_codec_xor_mapped_address_encode(nr_stun_attr_info *attr_info, void } static int -nr_stun_attr_codec_xor_mapped_address_decode(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data) +nr_stun_attr_codec_xor_mapped_address_decode(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data) { int r,_status; nr_stun_attr_xor_mapped_address *xor_mapped_address = data; @@ -1239,7 +1237,7 @@ int nr_stun_find_attr_info(UINT2 type, nr_stun_attr_info **info) { int _status; - int i; + size_t i; *info = 0; for (i = 0; i < sizeof(attrs)/sizeof(*attrs); ++i) { @@ -1278,6 +1276,13 @@ nr_stun_fix_attribute_ordering(nr_stun_message *msg) return 0; } +// Since this sanity check is only a collection of assert statements and those +// assert statements are compiled out in non-debug builds, undef SANITY_CHECKS +// so we can avoid the warning that padding_bytes is never used in opt builds. +#ifdef NDEBUG +#undef SANITY_CHECKS +#endif + #ifdef SANITY_CHECKS static void sanity_check_encoding_stuff(nr_stun_message *msg) { @@ -1307,8 +1312,8 @@ int nr_stun_encode_message(nr_stun_message *msg) { int r,_status; - int length_offset; - int length_offset_hold; + size_t length_offset; + size_t length_offset_hold; nr_stun_attr_info *attr_info; nr_stun_message_attribute *attr; int padding_bytes; @@ -1471,7 +1476,7 @@ nr_stun_decode_message(nr_stun_message *msg, int (*get_password)(void *arg, nr_s attr->encoding_length += padding_bytes; } - if ((attr->encoding_length) > size) { + if ((attr->encoding_length) > (size_t)size) { r_log(NR_LOG_STUN, LOG_WARNING, "Attribute length larger than remaining message size: %d/%d", attr->encoding_length, size); ABORT(R_FAILED); } diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_codec.h b/media/mtransport/third_party/nICEr/src/stun/stun_codec.h index 689d68fb62f41ce0f01d8ccf473ec1ebfa148b61..4e4ff60e0c29c60a4e1ff5766ffe8dfda42e77ed 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_codec.h +++ b/media/mtransport/third_party/nICEr/src/stun/stun_codec.h @@ -42,15 +42,15 @@ typedef struct nr_stun_attr_info_ nr_stun_attr_info; typedef struct nr_stun_attr_codec_ { char *name; int (*print)(nr_stun_attr_info *attr_info, char *msg, void *data); - int (*encode)(nr_stun_attr_info *attr_info, void *data, int offset, int buflen, UCHAR *buf, int *attrlen); - int (*decode)(nr_stun_attr_info *attr_info, int attrlen, UCHAR *buf, int offset, int buflen, void *data); + int (*encode)(nr_stun_attr_info *attr_info, void *data, size_t offset, size_t buflen, UCHAR *buf, size_t *attrlen); + int (*decode)(nr_stun_attr_info *attr_info, size_t attrlen, UCHAR *buf, size_t offset, size_t buflen, void *data); } nr_stun_attr_codec; struct nr_stun_attr_info_ { UINT2 type; char *name; nr_stun_attr_codec *codec; - int (*illegal)(nr_stun_attr_info *attr_info, int attrlen, void *data); + int (*illegal)(nr_stun_attr_info *attr_info, size_t attrlen, void *data); }; extern nr_stun_attr_codec nr_stun_attr_codec_UINT4; diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_hint.c b/media/mtransport/third_party/nICEr/src/stun/stun_hint.c index 941b14d64b017c2d0daedcf41317faa8e1e16892..40ba7ca39a4d59c3088cd04e0907c5f9f617cc5c 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_hint.c +++ b/media/mtransport/third_party/nICEr/src/stun/stun_hint.c @@ -55,7 +55,7 @@ static char *RCSSTRING __UNUSED__="$Id: stun_hint.c,v 1.2 2008/04/28 18:21:30 ek * 2 if it's super likely to be a STUN message * 3 if it really is a STUN message */ int -nr_is_stun_message(UCHAR *buf, int len) +nr_is_stun_message(UCHAR *buf, size_t len) { const UINT4 cookie = htonl(NR_STUN_MAGIC_COOKIE); const UINT4 cookie2 = htonl(NR_STUN_MAGIC_COOKIE2); @@ -163,7 +163,7 @@ nr_is_stun_message(UCHAR *buf, int len) } int -nr_is_stun_request_message(UCHAR *buf, int len) +nr_is_stun_request_message(UCHAR *buf, size_t len) { UINT2 type; @@ -180,7 +180,7 @@ nr_is_stun_request_message(UCHAR *buf, int len) } int -nr_is_stun_indication_message(UCHAR *buf, int len) +nr_is_stun_indication_message(UCHAR *buf, size_t len) { UINT2 type; @@ -197,7 +197,7 @@ nr_is_stun_indication_message(UCHAR *buf, int len) } int -nr_is_stun_response_message(UCHAR *buf, int len) +nr_is_stun_response_message(UCHAR *buf, size_t len) { UINT2 type; @@ -215,7 +215,7 @@ nr_is_stun_response_message(UCHAR *buf, int len) } int -nr_has_stun_cookie(UCHAR *buf, int len) +nr_has_stun_cookie(UCHAR *buf, size_t len) { static UINT4 cookie; diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_hint.h b/media/mtransport/third_party/nICEr/src/stun/stun_hint.h index 4b285d31d71084f3f1d20d1b97d5bcc98821cace..c2badc1d2b36e4ecc7d0a21e1fac07be51ebe274 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_hint.h +++ b/media/mtransport/third_party/nICEr/src/stun/stun_hint.h @@ -34,11 +34,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef _stun_hint_h #define _stun_hint_h -int nr_is_stun_message(UCHAR *buf, int len); -int nr_is_stun_request_message(UCHAR *buf, int len); -int nr_is_stun_response_message(UCHAR *buf, int len); -int nr_is_stun_indication_message(UCHAR *buf, int len); -int nr_has_stun_cookie(UCHAR *buf, int len); +int nr_is_stun_message(UCHAR *buf, size_t len); +int nr_is_stun_request_message(UCHAR *buf, size_t len); +int nr_is_stun_response_message(UCHAR *buf, size_t len); +int nr_is_stun_indication_message(UCHAR *buf, size_t len); +int nr_has_stun_cookie(UCHAR *buf, size_t len); int nr_stun_message_length(UCHAR *buf, int len, int *length); #endif diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_msg.c b/media/mtransport/third_party/nICEr/src/stun/stun_msg.c index c34bb46b04eff2e878589a688acfe5e524e6e8e5..38d0dd487babc697e80a58532be2bbc7a4a7491d 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_msg.c +++ b/media/mtransport/third_party/nICEr/src/stun/stun_msg.c @@ -69,7 +69,7 @@ nr_stun_message_create(nr_stun_message **msg) } int -nr_stun_message_create2(nr_stun_message **msg, UCHAR *buffer, int length) +nr_stun_message_create2(nr_stun_message **msg, UCHAR *buffer, size_t length) { int r,_status; nr_stun_message *m = 0; @@ -209,7 +209,7 @@ NR_STUN_MESSAGE_ADD_ATTRIBUTE( NR_STUN_ATTR_ERROR_CODE, { attr->u.error_code.number = number; - strlcpy(attr->u.error_code.reason, reason, sizeof(attr->u.error_code.reason)); + (void)strlcpy(attr->u.error_code.reason, reason, sizeof(attr->u.error_code.reason)); } ) @@ -237,21 +237,21 @@ int nr_stun_message_add_nonce_attribute(nr_stun_message *msg, char *nonce) NR_STUN_MESSAGE_ADD_ATTRIBUTE( NR_STUN_ATTR_NONCE, - { strlcpy(attr->u.nonce, nonce, sizeof(attr->u.nonce)); } + { (void)strlcpy(attr->u.nonce, nonce, sizeof(attr->u.nonce)); } ) int nr_stun_message_add_realm_attribute(nr_stun_message *msg, char *realm) NR_STUN_MESSAGE_ADD_ATTRIBUTE( NR_STUN_ATTR_REALM, - { strlcpy(attr->u.realm, realm, sizeof(attr->u.realm)); } + { (void)strlcpy(attr->u.realm, realm, sizeof(attr->u.realm)); } ) int nr_stun_message_add_server_attribute(nr_stun_message *msg, char *server_name) NR_STUN_MESSAGE_ADD_ATTRIBUTE( NR_STUN_ATTR_SERVER, - { strlcpy(attr->u.server_name, server_name, sizeof(attr->u.server_name)); } + { (void)strlcpy(attr->u.server_name, server_name, sizeof(attr->u.server_name)); } ) int @@ -265,7 +265,7 @@ int nr_stun_message_add_username_attribute(nr_stun_message *msg, char *username) NR_STUN_MESSAGE_ADD_ATTRIBUTE( NR_STUN_ATTR_USERNAME, - { strlcpy(attr->u.username, username, sizeof(attr->u.username)); } + { (void)strlcpy(attr->u.username, username, sizeof(attr->u.username)); } ) int diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_msg.h b/media/mtransport/third_party/nICEr/src/stun/stun_msg.h index 927ce2e3c68122ec51b574174a078911b341515e..a943698c36ce9645f4ab9b8cfd96673c700d51a5 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_msg.h +++ b/media/mtransport/third_party/nICEr/src/stun/stun_msg.h @@ -87,7 +87,7 @@ typedef struct nr_stun_attr_xor_mapped_address_ { typedef struct nr_stun_attr_data_ { UCHAR data[NR_STUN_MAX_MESSAGE_SIZE]; - int length; + size_t length; } nr_stun_attr_data; @@ -137,7 +137,7 @@ typedef struct nr_stun_message_attribute_ { UCHAR largest_possible_attribute[NR_STUN_MAX_MESSAGE_SIZE]; } u; nr_stun_encoded_attribute *encoding; - int encoding_length; + size_t encoding_length; char *name; char *type_name; int invalid; @@ -156,7 +156,7 @@ typedef struct nr_stun_message_header_ { typedef struct nr_stun_message_ { char *name; UCHAR buffer[NR_STUN_MAX_MESSAGE_SIZE]; - int length; + size_t length; nr_stun_message_header header; int comprehension_required_unknown_attributes; int comprehension_optional_unknown_attributes; @@ -164,7 +164,7 @@ typedef struct nr_stun_message_ { } nr_stun_message; int nr_stun_message_create(nr_stun_message **msg); -int nr_stun_message_create2(nr_stun_message **msg, UCHAR *buffer, int length); +int nr_stun_message_create2(nr_stun_message **msg, UCHAR *buffer, size_t length); int nr_stun_message_destroy(nr_stun_message **msg); int nr_stun_message_attribute_create(nr_stun_message *msg, nr_stun_message_attribute **attr); diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_server_ctx.c b/media/mtransport/third_party/nICEr/src/stun/stun_server_ctx.c index 3bfa1674b28ddc62dda63d2600d3d486c38dcf7d..eff4ec7a1431885df75d7456f8c30dcd194662be 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_server_ctx.c +++ b/media/mtransport/third_party/nICEr/src/stun/stun_server_ctx.c @@ -386,18 +386,10 @@ int nr_stun_server_process_request(nr_stun_server_ctx *ctx, nr_socket *sock, cha static int nr_stun_server_send_response(nr_stun_server_ctx *ctx, nr_socket *sock, nr_transport_addr *peer_addr, nr_stun_message *res, nr_stun_server_client *clnt) { int r,_status; - Data *hmacPassword; char string[256]; r_log(NR_LOG_STUN,LOG_DEBUG,"STUN-SERVER(label=%s): Sending(my_addr=%s,peer_addr=%s)",ctx->label,ctx->my_addr.as_string,peer_addr->as_string); - if (clnt) { - hmacPassword = &clnt->password; - } - else { - hmacPassword = 0; - } - if ((r=nr_stun_encode_message(res))) { /* should never happen */ r_log(NR_LOG_STUN,LOG_ERR,"STUN-SERVER(label=%s): Unable to encode message", ctx->label); diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_util.c b/media/mtransport/third_party/nICEr/src/stun/stun_util.c index a5f79bea5c8d1897561d5ed8fc5b8ec4da1d5438..e5fa66bc773b5837308864bb31d85cd20c67562c 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_util.c +++ b/media/mtransport/third_party/nICEr/src/stun/stun_util.c @@ -94,7 +94,7 @@ nr_stun_xor_mapped_address(UINT4 magicCookie, UINT12 transactionId, nr_transport /* We now have the mask in network byte order */ /* Xor the address in network byte order */ - for (int i = 0; i < sizeof(maskedAddr); ++i) { + for (size_t i = 0; i < sizeof(maskedAddr); ++i) { maskedAddr.addr[i] ^= from->u.addr6.sin6_addr.s6_addr[i]; } @@ -206,7 +206,7 @@ nr_stun_find_local_addresses(nr_local_addr addrs[], int maxaddrs, int *count) } int -nr_stun_different_transaction(UCHAR *msg, int len, nr_stun_message *req) +nr_stun_different_transaction(UCHAR *msg, size_t len, nr_stun_message *req) { int _status; nr_stun_message_header header; @@ -339,3 +339,17 @@ nr_random_alphanum(char *alphanum, int size) return 0; } + +#ifndef UINT2_MAX +#define UINT2_MAX ((UINT2)(65535U)) +#endif + +void nr_accumulate_count(UINT2* orig_count, UINT2 add_count) + { + if (UINT2_MAX - add_count < *orig_count) { + // don't rollover, just stop accumulating at MAX value + *orig_count = UINT2_MAX; + } else { + *orig_count += add_count; + } + } diff --git a/media/mtransport/third_party/nICEr/src/stun/stun_util.h b/media/mtransport/third_party/nICEr/src/stun/stun_util.h index 627b1d1b139e7436edb1f43c59b15a66e58ce779..379b4fdd3dc1cc5ae110b0eabd28f0346f23e8ce 100644 --- a/media/mtransport/third_party/nICEr/src/stun/stun_util.h +++ b/media/mtransport/third_party/nICEr/src/stun/stun_util.h @@ -49,11 +49,14 @@ int nr_stun_filter_local_addresses(nr_local_addr addrs[], int *count); int nr_stun_find_local_addresses(nr_local_addr addrs[], int maxaddrs, int *count); -int nr_stun_different_transaction(UCHAR *msg, int len, nr_stun_message *req); +int nr_stun_different_transaction(UCHAR *msg, size_t len, nr_stun_message *req); char* nr_stun_msg_type(int type); int nr_random_alphanum(char *alphanum, int size); +// accumulate a count without worrying about rollover +void nr_accumulate_count(UINT2* orig_count, UINT2 add_count); + #endif diff --git a/media/mtransport/third_party/nICEr/src/stun/turn_client_ctx.c b/media/mtransport/third_party/nICEr/src/stun/turn_client_ctx.c index ebdc2498877bdb318ffa02f4f309b366faf46280..6dc4e74a12282e01f42f9399e972564a7a2b5252 100644 --- a/media/mtransport/third_party/nICEr/src/stun/turn_client_ctx.c +++ b/media/mtransport/third_party/nICEr/src/stun/turn_client_ctx.c @@ -257,13 +257,13 @@ static void nr_turn_stun_ctx_cb(NR_SOCKET s, int how, void *arg) /* TODO(ekr@rtfm.com): Add alternate-server (Mozilla bug 857688) */ if (ctx->stun->error_code == 438) { // track 438s for ice telemetry - nr_ice_accumulate_count(&(ctx->tctx->cnt_438s), 1); + nr_accumulate_count(&(ctx->tctx->cnt_438s), 1); } if (ctx->stun->error_code == 401 || ctx->stun->error_code == 438) { if (ctx->retry_ct > 0) { if (ctx->stun->error_code == 401) { // track 401s for ice telemetry - nr_ice_accumulate_count(&(ctx->tctx->cnt_401s), 1); + nr_accumulate_count(&(ctx->tctx->cnt_401s), 1); } r_log(NR_LOG_TURN, LOG_WARNING, "TURN(%s): Exceeded the number of retries", ctx->tctx->label); ABORT(R_FAILED); @@ -615,7 +615,7 @@ static void nr_turn_client_permission_error_cb(NR_SOCKET s, int how, void *arg) if (ctx->last_error_code == 403) { // track 403s for ice telemetry - nr_ice_accumulate_count(&(ctx->tctx->cnt_403s), 1); + nr_accumulate_count(&(ctx->tctx->cnt_403s), 1); r_log(NR_LOG_TURN, LOG_WARNING, "TURN(%s): mode %d, permission denied", ctx->tctx->label, ctx->mode); diff --git a/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.c b/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.c index add52757581d177c77785019365efafdcc7885f6..92e7d4046db4834cb1cf92a774cab5b2f10c25da 100644 --- a/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.c +++ b/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.c @@ -90,7 +90,7 @@ static char *RCSSTRING __UNUSED__ =(char *)"$Id: r_data.c,v 1.2 2006/08/16 19:39 int r_data_create(dp,d,l) Data **dp; const UCHAR *d; - int l; + size_t l; { Data *d_=0; int _status; @@ -116,7 +116,7 @@ int r_data_create(dp,d,l) int r_data_alloc_mem(d,l) Data *d; - int l; + size_t l; { int _status; @@ -131,7 +131,7 @@ int r_data_alloc_mem(d,l) int r_data_alloc(dp,l) Data **dp; - int l; + size_t l; { Data *d_=0; int _status; @@ -155,7 +155,7 @@ int r_data_alloc(dp,l) int r_data_make(dp,d,l) Data *dp; const UCHAR *d; - int l; + size_t l; { if(!(dp->data=(UCHAR *)RMALLOC(l))) ERETURN(R_NO_MEMORY); diff --git a/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.h b/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.h index 0e46c3196307a475c581b1e92a86f38d9ea4d0ad..3edf7b287aecac96fb5b0179c2b69a9b0a6bdc0e 100644 --- a/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.h +++ b/media/mtransport/third_party/nrappkit/src/util/libekr/r_data.h @@ -86,13 +86,13 @@ typedef struct Data_ { UCHAR *data; - int len; + size_t len; } Data; -int r_data_create(Data **dp,const UCHAR *d,int l); -int r_data_alloc(Data **dp, int l); -int r_data_make(Data *dp, const UCHAR *d,int l); -int r_data_alloc_mem(Data *d,int l); +int r_data_create(Data **dp,const UCHAR *d,size_t l); +int r_data_alloc(Data **dp, size_t l); +int r_data_make(Data *dp, const UCHAR *d,size_t l); +int r_data_alloc_mem(Data *d,size_t l); int r_data_destroy(Data **dp); int r_data_destroy_v(void *v); int r_data_destroy_vp(void **vp);