multiple origins supported
This commit is contained in:
parent
0657709ec1
commit
6477fcdcee
@ -1,5 +1,6 @@
|
||||
06/25/2014 Oleg Moskalenko <mom040267@gmail.com>
|
||||
Version 4.0.1.4 'Severard':
|
||||
- multiple origins supported.
|
||||
- working on compilation warnings.
|
||||
|
||||
06/13/2014 Oleg Moskalenko <mom040267@gmail.com>
|
||||
|
||||
@ -186,7 +186,7 @@ int get_realm_data(char* name, realm_params_t* rp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void get_realm_options_by_origin(char *origin, realm_options_t* ro)
|
||||
int get_realm_options_by_origin(char *origin, realm_options_t* ro)
|
||||
{
|
||||
ur_string_map_value_type value = 0;
|
||||
TURN_MUTEX_LOCK(&o_to_realm_mutex);
|
||||
@ -197,9 +197,11 @@ void get_realm_options_by_origin(char *origin, realm_options_t* ro)
|
||||
get_realm_data(realm, &rp);
|
||||
ns_bcopy(&(rp.options),ro,sizeof(realm_options_t));
|
||||
free(realm);
|
||||
return 1;
|
||||
} else {
|
||||
TURN_MUTEX_UNLOCK(&o_to_realm_mutex);
|
||||
get_default_realm_options(ro);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -260,7 +260,7 @@ unsigned char *base64_decode(const char *data,
|
||||
///////////// Realm ///////////////////
|
||||
|
||||
void get_default_realm_options(realm_options_t* ro);
|
||||
void get_realm_options_by_origin(char *origin, realm_options_t* ro);
|
||||
int get_realm_options_by_origin(char *origin, realm_options_t* ro);
|
||||
void get_realm_options_by_name(char *realm, realm_options_t* ro);
|
||||
int get_canonic_origin(const char* o, char *co, int sz);
|
||||
int get_default_protocol_port(const char* scheme, size_t slen);
|
||||
|
||||
@ -3231,29 +3231,36 @@ static int handle_turn_command(turn_turnserver *server, ts_ur_super_session *ss,
|
||||
}
|
||||
|
||||
if(!(ss->realm_set) && (method == STUN_METHOD_ALLOCATE)) {
|
||||
stun_attr_ref sar = stun_attr_get_first_by_type_str(ioa_network_buffer_data(in_buffer->nbh),
|
||||
ioa_network_buffer_get_size(in_buffer->nbh),
|
||||
STUN_ATTRIBUTE_ORIGIN);
|
||||
|
||||
if(sar) {
|
||||
int sarlen = stun_attr_get_len(sar);
|
||||
if(sarlen>0) {
|
||||
char *o = (char*)turn_malloc(sarlen+1);
|
||||
ns_bcopy(stun_attr_get_value(sar),o,sarlen);
|
||||
o[sarlen]=0;
|
||||
char *corigin = (char*)turn_malloc(STUN_MAX_ORIGIN_SIZE+1);
|
||||
corigin[0]=0;
|
||||
if(get_canonic_origin(o,corigin,STUN_MAX_ORIGIN_SIZE)<0) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,
|
||||
stun_attr_ref sar = stun_attr_get_first_str(ioa_network_buffer_data(in_buffer->nbh),
|
||||
ioa_network_buffer_get_size(in_buffer->nbh));
|
||||
|
||||
int origin_found = 0;
|
||||
|
||||
while(sar && !origin_found) {
|
||||
if(stun_attr_get_type(sar) == STUN_ATTRIBUTE_ORIGIN) {
|
||||
int sarlen = stun_attr_get_len(sar);
|
||||
if(sarlen>0) {
|
||||
char *o = (char*)turn_malloc(sarlen+1);
|
||||
ns_bcopy(stun_attr_get_value(sar),o,sarlen);
|
||||
o[sarlen]=0;
|
||||
char *corigin = (char*)turn_malloc(STUN_MAX_ORIGIN_SIZE+1);
|
||||
corigin[0]=0;
|
||||
if(get_canonic_origin(o,corigin,STUN_MAX_ORIGIN_SIZE)<0) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,
|
||||
"%s: Wrong origin format: %s\n",
|
||||
__FUNCTION__, o);
|
||||
}
|
||||
strncpy(ss->origin,corigin,STUN_MAX_ORIGIN_SIZE);
|
||||
turn_free(corigin,sarlen+1);
|
||||
turn_free(o,sarlen+1);
|
||||
origin_found = get_realm_options_by_origin(ss->origin,&(ss->realm_options));
|
||||
}
|
||||
strncpy(ss->origin,corigin,STUN_MAX_ORIGIN_SIZE);
|
||||
turn_free(corigin,sarlen+1);
|
||||
turn_free(o,sarlen+1);
|
||||
get_realm_options_by_origin(ss->origin,&(ss->realm_options));
|
||||
}
|
||||
sar = stun_attr_get_next_str(ioa_network_buffer_data(in_buffer->nbh),
|
||||
ioa_network_buffer_get_size(in_buffer->nbh), sar);
|
||||
}
|
||||
|
||||
ss->realm_set = 1;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user