error codes cleaned

libevent.rpm
mom040267 10 years ago
parent 670b6b6617
commit ce19cf3cee
  1. 138
      src/client/ns_turn_msg.c
  2. 2
      src/client/ns_turn_msg.h
  3. 29
      src/server/ns_turn_server.c

@ -591,63 +591,79 @@ void old_stun_init_success_response_str(u16bits method, u08bits* buf, size_t *le
} }
} }
const u08bits* get_default_reason(int error_code)
{
const u08bits* reason = (const u08bits *) "Unknown error";
switch (error_code){
case 300:
reason = (const u08bits *) "Try Alternate";
break;
case 400:
reason = (const u08bits *) "Bad Request";
break;
case 401:
reason = (const u08bits *) "Unauthorized";
break;
case 403:
reason = (const u08bits *) "Forbidden";
break;
case 404:
reason = (const u08bits *) "Not Found";
break;
case 420:
reason = (const u08bits *) "Unknown Attribute";
break;
case 437:
reason = (const u08bits *) "Allocation Mismatch";
break;
case 438:
reason = (const u08bits *) "Stale Nonce";
break;
case 440:
reason = (const u08bits *) "Address Family not Supported";
break;
case 441:
reason = (const u08bits *) "Wrong Credentials";
break;
case 442:
reason = (const u08bits *) "Unsupported Transport Protocol";
break;
case 443:
reason = (const u08bits *) "Peer Address Family Mismatch";
break;
case 446:
reason = (const u08bits *) "Connection Already Exists";
break;
case 447:
reason = (const u08bits *) "Connection Timeout or Failure";
break;
case 486:
reason = (const u08bits *) "Allocation Quota Reached";
break;
case 487:
reason = (const u08bits *) "Role Conflict";
break;
case 500:
reason = (const u08bits *) "Server Error";
break;
case 508:
reason = (const u08bits *) "Insufficient Capacity";
break;
default:
;
};
return reason;
}
static void stun_init_error_response_common_str(u08bits* buf, size_t *len, static void stun_init_error_response_common_str(u08bits* buf, size_t *len,
u16bits error_code, const u08bits *reason, u16bits error_code, const u08bits *reason,
stun_tid* id) stun_tid* id)
{ {
if (!reason) { if (!reason) {
reason = get_default_reason(error_code);
switch (error_code){
case 300:
reason = (const u08bits *) "Try Alternate";
break;
case 400:
reason = (const u08bits *) "Bad Request";
break;
case 401:
reason = (const u08bits *) "Unauthorized";
break;
case 403:
reason = (const u08bits *) "Forbidden";
break;
case 404:
reason = (const u08bits *) "Not Found";
break;
case 420:
reason = (const u08bits *) "Unknown Attribute";
break;
case 437:
reason = (const u08bits *) "Allocation Mismatch";
break;
case 438:
reason = (const u08bits *) "Stale Nonce";
break;
case 440:
reason = (const u08bits *) "Address Family not Supported";
break;
case 441:
reason = (const u08bits *) "Wrong Credentials";
break;
case 442:
reason = (const u08bits *) "Unsupported Transport Protocol";
break;
case 443:
reason = (const u08bits *) "Peer Address Family Mismatch";
break;
case 486:
reason = (const u08bits *) "Allocation Quota Reached";
break;
case 500:
reason = (const u08bits *) "Server Error";
break;
case 508:
reason = (const u08bits *) "Insufficient Capacity";
break;
default:
reason = (const u08bits *) "Unknown Error";
break;
};
} }
u08bits avalue[513]; u08bits avalue[513];
@ -1452,25 +1468,7 @@ int stun_attr_add_bandwidth_str(u08bits* buf, size_t *len, band_limit_t bps0) {
int stun_attr_add_address_error_code(u08bits* buf, size_t *len, int requested_address_family, int error_code) int stun_attr_add_address_error_code(u08bits* buf, size_t *len, int requested_address_family, int error_code)
{ {
const u08bits *reason = NULL; const u08bits *reason = get_default_reason(error_code);
switch (error_code){
case 440:
reason = (const u08bits *) "Address Family not Supported";
break;
case 486:
reason = (const u08bits *) "Allocation Quota Reached";
break;
case 500:
reason = (const u08bits *) "Server Error";
break;
case 508:
reason = (const u08bits *) "Insufficient Capacity";
break;
default:
reason = (const u08bits *) "Unknown Error";
break;
};
u08bits avalue[513]; u08bits avalue[513];
avalue[0] = (u08bits)requested_address_family; avalue[0] = (u08bits)requested_address_family;

@ -134,6 +134,8 @@ void stun_tid_generate_in_message_str(u08bits* buf, stun_tid* id);
int stun_get_command_message_len_str(const u08bits* buf, size_t len); int stun_get_command_message_len_str(const u08bits* buf, size_t len);
const u08bits* get_default_reason(int error_code);
int stun_attr_is_addr(stun_attr_ref attr); int stun_attr_is_addr(stun_attr_ref attr);
int stun_attr_get_type(stun_attr_ref attr); int stun_attr_get_type(stun_attr_ref attr);
int stun_attr_get_len(stun_attr_ref attr); int stun_attr_get_len(stun_attr_ref attr);

@ -1047,7 +1047,6 @@ static int handle_turn_allocate(turn_turnserver *server,
transport = get_transport_value(value); transport = get_transport_value(value);
if (!transport) { if (!transport) {
*err_code = 442; *err_code = 442;
*reason = (const u08bits *)"Unsupported Transport Protocol";
} }
if((transport == STUN_ATTRIBUTE_TRANSPORT_TCP_VALUE) && *(server->no_tcp_relay)) { if((transport == STUN_ATTRIBUTE_TRANSPORT_TCP_VALUE) && *(server->no_tcp_relay)) {
*err_code = 442; *err_code = 442;
@ -1159,7 +1158,6 @@ static int handle_turn_allocate(turn_turnserver *server,
break; break;
default: default:
*err_code = 440; *err_code = 440;
*reason = (const u08bits *)"Unsupported address family requested";
} }
} }
} }
@ -1182,8 +1180,6 @@ static int handle_turn_allocate(turn_turnserver *server,
} else if (*ua_num > 0) { } else if (*ua_num > 0) {
*err_code = 420; *err_code = 420;
if(!(*reason))
*reason = (const u08bits *)"Unknown attribute";
} else if (*err_code) { } else if (*err_code) {
@ -1209,7 +1205,6 @@ static int handle_turn_allocate(turn_turnserver *server,
if(inc_quota(ss, username)<0) { if(inc_quota(ss, username)<0) {
*err_code = 486; *err_code = 486;
*reason = (const u08bits *)"Allocation Quota Reached";
} else { } else {
@ -1561,7 +1556,6 @@ static int handle_turn_refresh(turn_turnserver *server,
if (*ua_num > 0) { if (*ua_num > 0) {
*err_code = 420; *err_code = 420;
*reason = (const u08bits *)"Unknown attribute";
} else if (*err_code) { } else if (*err_code) {
@ -1980,8 +1974,7 @@ static void tcp_peer_connection_completed_callback(int success, void *arg)
addr_to_string(&(tc->peer_addr),(u08bits*)rs); addr_to_string(&(tc->peer_addr),(u08bits*)rs);
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: failure to connect from %s to %s\n", __FUNCTION__, ls,rs); TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: failure to connect from %s to %s\n", __FUNCTION__, ls,rs);
} }
const u08bits *reason = (const u08bits *)"Connection Timeout or Failure"; stun_init_error_response_str(STUN_METHOD_CONNECT, ioa_network_buffer_data(nbh), &len, err_code, NULL, &(tc->tid));
stun_init_error_response_str(STUN_METHOD_CONNECT, ioa_network_buffer_data(nbh), &len, err_code, reason, &(tc->tid));
} }
ioa_network_buffer_set_size(nbh,len); ioa_network_buffer_set_size(nbh,len);
@ -2051,7 +2044,6 @@ static int tcp_start_connection_to_peer(turn_turnserver *server, ts_ur_super_ses
tcp_connection *tc = get_tcp_connection_by_peer(a, peer_addr); tcp_connection *tc = get_tcp_connection_by_peer(a, peer_addr);
if(tc) { if(tc) {
*err_code = 446; *err_code = 446;
*reason = (const u08bits *)"Connection Already Exists";
FUNCEND; FUNCEND;
return -1; return -1;
} }
@ -2219,7 +2211,6 @@ static int handle_turn_connect(turn_turnserver *server,
*reason = (const u08bits *)"Connect cannot be used with UDP relay"; *reason = (const u08bits *)"Connect cannot be used with UDP relay";
} else if (!is_allocation_valid(a)) { } else if (!is_allocation_valid(a)) {
*err_code = 437; *err_code = 437;
*reason = (const u08bits *)"Allocation mismatch";
} else { } else {
stun_attr_ref sar = stun_attr_get_first_str(ioa_network_buffer_data(in_buffer->nbh), stun_attr_ref sar = stun_attr_get_first_str(ioa_network_buffer_data(in_buffer->nbh),
@ -2258,7 +2249,6 @@ static int handle_turn_connect(turn_turnserver *server,
if (*ua_num > 0) { if (*ua_num > 0) {
*err_code = 420; *err_code = 420;
*reason = (const u08bits *)"Unknown attribute";
} else if (*err_code) { } else if (*err_code) {
@ -2296,7 +2286,6 @@ static int handle_turn_connection_bind(turn_turnserver *server,
if(ss->to_be_closed) { if(ss->to_be_closed) {
*err_code = 400; *err_code = 400;
*reason = (const u08bits *)"Bad request";
} else if (is_allocation_valid(a)) { } else if (is_allocation_valid(a)) {
@ -2343,7 +2332,6 @@ static int handle_turn_connection_bind(turn_turnserver *server,
if (*ua_num > 0) { if (*ua_num > 0) {
*err_code = 420; *err_code = 420;
*reason = (const u08bits *)"Unknown attribute";
} else if (*err_code) { } else if (*err_code) {
@ -2584,7 +2572,6 @@ static int handle_turn_channel_bind(turn_turnserver *server,
if (*ua_num > 0) { if (*ua_num > 0) {
*err_code = 420; *err_code = 420;
*reason = (const u08bits *)"Unknown attribute";
} else if (*err_code) { } else if (*err_code) {
@ -2798,7 +2785,6 @@ static int handle_turn_binding(turn_turnserver *server,
if (*ua_num > 0) { if (*ua_num > 0) {
*err_code = 420; *err_code = 420;
*reason = (const u08bits *)"Unknown attribute";
} else if (*err_code) { } else if (*err_code) {
@ -3286,7 +3272,6 @@ static int check_stun_auth(turn_turnserver *server,
if(!sar) { if(!sar) {
*err_code = 401; *err_code = 401;
*reason = (const u08bits*)"Unauthorised";
return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method); return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method);
} }
@ -3354,7 +3339,6 @@ static int check_stun_auth(turn_turnserver *server,
if(!sar) { if(!sar) {
*err_code = 400; *err_code = 400;
*reason = (const u08bits*)"Bad request";
return -1; return -1;
} }
@ -3386,7 +3370,6 @@ static int check_stun_auth(turn_turnserver *server,
if(!sar) { if(!sar) {
*err_code = 400; *err_code = 400;
*reason = (const u08bits*)"Bad request";
return -1; return -1;
} }
@ -3405,7 +3388,6 @@ static int check_stun_auth(turn_turnserver *server,
*reason = (const u08bits*)"Allocation mismatch: wrong credentials"; *reason = (const u08bits*)"Allocation mismatch: wrong credentials";
} else { } else {
*err_code = 441; *err_code = 441;
*reason = (const u08bits*)"Wrong credentials";
} }
return -1; return -1;
} }
@ -3424,7 +3406,6 @@ static int check_stun_auth(turn_turnserver *server,
if(!sar) { if(!sar) {
*err_code = 400; *err_code = 400;
*reason = (const u08bits*)"Bad request";
return -1; return -1;
} }
@ -3461,7 +3442,6 @@ static int check_stun_auth(turn_turnserver *server,
"%s: Cannot find credentials of user <%s>\n", "%s: Cannot find credentials of user <%s>\n",
__FUNCTION__, (char*)usname); __FUNCTION__, (char*)usname);
*err_code = 401; *err_code = 401;
*reason = (const u08bits*)"Unauthorised";
return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method); return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method);
} }
@ -3480,7 +3460,6 @@ static int check_stun_auth(turn_turnserver *server,
__FUNCTION__, (char*)usname); __FUNCTION__, (char*)usname);
*err_code = SHA_TOO_WEAK_ERROR_CODE; *err_code = SHA_TOO_WEAK_ERROR_CODE;
*reason = SHA_TOO_WEAK_ERROR_REASON; *reason = SHA_TOO_WEAK_ERROR_REASON;
*reason = (const u08bits*)"Unauthorised: weak SHA function is used";
return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method); return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method);
} }
@ -3495,7 +3474,6 @@ static int check_stun_auth(turn_turnserver *server,
"%s: user %s credentials are incorrect\n", "%s: user %s credentials are incorrect\n",
__FUNCTION__, (char*)usname); __FUNCTION__, (char*)usname);
*err_code = 401; *err_code = 401;
*reason = (const u08bits*)"Unauthorised";
return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method); return create_challenge_response(ss,tid,resp_constructed,err_code,reason,nbh,method);
} }
@ -3528,7 +3506,6 @@ static void set_alternate_server(turn_server_addrs_list_t *asl, const ioa_addr *
if(addr->ss.sa_family == local_addr->ss.sa_family) { if(addr->ss.sa_family == local_addr->ss.sa_family) {
*err_code = 300; *err_code = 300;
*reason = (const u08bits *)"Redirect";
size_t len = ioa_network_buffer_get_size(nbh); size_t len = ioa_network_buffer_get_size(nbh);
stun_init_error_response_str(method, ioa_network_buffer_data(nbh), &len, *err_code, *reason, tid); stun_init_error_response_str(method, ioa_network_buffer_data(nbh), &len, *err_code, *reason, tid);
@ -4329,7 +4306,7 @@ static int create_relay_connection(turn_turnserver* server,
ioa_socket_tobeclosed(s)) { ioa_socket_tobeclosed(s)) {
IOA_CLOSE_SOCKET(s); IOA_CLOSE_SOCKET(s);
*err_code = 508; *err_code = 404;
*reason = (const u08bits *)"Cannot find reserved socket"; *reason = (const u08bits *)"Cannot find reserved socket";
return -1; return -1;
} }
@ -4389,7 +4366,7 @@ static int create_relay_connection(turn_turnserver* server,
} else { } else {
IOA_CLOSE_SOCKET(newelem->s); IOA_CLOSE_SOCKET(newelem->s);
IOA_CLOSE_SOCKET(rtcp_s); IOA_CLOSE_SOCKET(rtcp_s);
*err_code = 508; *err_code = 500;
*reason = (const u08bits *)"Wrong reservation tokens (internal error)"; *reason = (const u08bits *)"Wrong reservation tokens (internal error)";
return -1; return -1;
} }

Loading…
Cancel
Save