Change how we set the local and remote address.
authorJoshua Colp <jcolp@digium.com>
Fri, 10 Apr 2009 18:14:47 +0000 (18:14 +0000)
committerJoshua Colp <jcolp@digium.com>
Fri, 10 Apr 2009 18:14:47 +0000 (18:14 +0000)
The code will now only change the address and port. It will not overwrite any other values.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@187773 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/rtp_engine.c
res/res_rtp_asterisk.c

index 1b35aa4..89f9a59 100644 (file)
@@ -312,7 +312,9 @@ struct ast_rtp_instance *ast_rtp_instance_new(const char *engine_name, struct sc
                return NULL;
        }
        instance->engine = engine;
-       memcpy(&instance->local_address, sin, sizeof(instance->local_address));
+       instance->local_address.sin_family = AF_INET;
+       instance->local_address.sin_addr = sin->sin_addr;
+       instance->remote_address.sin_family = AF_INET;
 
        ast_debug(1, "Using engine '%s' for RTP instance '%p'\n", engine->name, instance);
 
@@ -350,20 +352,22 @@ struct ast_frame *ast_rtp_instance_read(struct ast_rtp_instance *instance, int r
 
 int ast_rtp_instance_set_local_address(struct ast_rtp_instance *instance, struct sockaddr_in *address)
 {
-       memcpy(&instance->local_address, address, sizeof(instance->local_address));
+       instance->local_address.sin_addr = address->sin_addr;
+       instance->local_address.sin_port = address->sin_port;
        return 0;
 }
 
 int ast_rtp_instance_set_remote_address(struct ast_rtp_instance *instance, struct sockaddr_in *address)
 {
        if (&instance->remote_address != address) {
-               memcpy(&instance->remote_address, address, sizeof(instance->remote_address));
+               instance->remote_address.sin_addr = address->sin_addr;
+               instance->remote_address.sin_port = address->sin_port;
        }
 
        /* moo */
 
        if (instance->engine->remote_address_set) {
-               instance->engine->remote_address_set(instance, address);
+               instance->engine->remote_address_set(instance, &instance->remote_address);
        }
 
        return 0;
index 60e9142..87491e8 100644 (file)
@@ -406,13 +406,11 @@ static int ast_rtp_new(struct ast_rtp_instance *instance, struct sched_context *
        startplace = x;
 
        for (;;) {
-               struct sockaddr_in local_address = { 0, };
-
-               local_address.sin_port = htons(x);
+               sin->sin_port = htons(x);
                /* Try to bind, this will tell us whether the port is available or not */
-               if (!bind(rtp->s, (struct sockaddr*)&local_address, sizeof(local_address))) {
+               if (!bind(rtp->s, (struct sockaddr *)sin, sizeof(*sin))) {
                        ast_debug(1, "Allocated port %d for RTP instance '%p'\n", x, instance);
-                       ast_rtp_instance_set_local_address(instance, &local_address);
+                       ast_rtp_instance_set_local_address(instance, sin);
                        break;
                }