]> sjero.net Git - linphone/commitdiff
implement linphone_core_get_sip_socket() through an eXosip extension
authorSimon Morlat <simon.morlat@linphone.org>
Thu, 22 Apr 2010 13:29:17 +0000 (15:29 +0200)
committerSimon Morlat <simon.morlat@linphone.org>
Thu, 22 Apr 2010 13:29:17 +0000 (15:29 +0200)
coreapi/sal_eXosip2.c
coreapi/sal_eXosip2.h
m4/exosip.m4

index 8dad1518ce161e7029f65b406f9c73da153b9d5b..d72cd0d43642fa58f96f9e80df7a401e37c7209a 100644 (file)
@@ -251,7 +251,6 @@ Sal * sal_init(){
        }
        eXosip_init();
        sal=ms_new0(Sal,1);
-       sal->sock=-1;
        return sal;
 }
 
@@ -310,49 +309,6 @@ void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs){
                ctx->callbacks.ping_reply=(SalOnPingReply)unimplemented_stub;
 }
 
-
-static ortp_socket_t create_socket(int pf, int proto, const char *addr, int local_port){
-       struct addrinfo hints;
-       struct addrinfo *res=NULL;
-       ortp_socket_t sock;
-       int optval;
-       char tmp[20];
-       int err;
-       
-       sock=socket(pf,(proto==IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM,0);
-       if (sock<0) {
-               ms_error("Fail to create socket");
-               return -1;
-       }
-       snprintf(tmp,sizeof(tmp)-1,"%i",local_port);
-       memset (&hints,0,sizeof(hints));
-       hints.ai_family=(pf==PF_INET) ? AF_INET : AF_INET6;
-       hints.ai_socktype=(proto==IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM;
-       
-       if ((err=getaddrinfo(addr,
-               tmp,
-               &hints,&res))<0) {
-               ms_error("create_socket: getaddrinfo() failed: %s",gai_strerror(err));
-               close_socket(sock);
-               return -1;
-       }
-       if (bind(sock,(struct sockaddr*)res->ai_addr,res->ai_addrlen)<0){
-               ms_error("Bind socket to localhost:%i failed: %s",local_port,getSocketError());
-               freeaddrinfo(res);
-               close_socket(sock);
-               return -1;
-       }
-       freeaddrinfo(res);
-       optval=1;
-       if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
-                               (SOCKET_OPTION_VALUE)&optval, sizeof (optval))<0){
-               ms_warning("Fail to set SO_REUSEADDR");
-       }
-       /*set_non_blocking_socket(sock);*/
-       return sock;
-}
-
-
 int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure){
        int err;
        bool_t ipv6;
@@ -373,22 +329,21 @@ int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int i
                ms_fatal("SIP over TCP or TLS or DTLS is not supported yet.");
                return -1;
        }
-       ctx->sock=create_socket(ipv6 ?  PF_INET6 : PF_INET, proto, addr, port);
-       if (ctx->sock==-1) return -1;
-       ms_message("Exosip is given socket %i",ctx->sock);
-       eXosip_set_socket(proto,ctx->sock,port);
-       /* this is to properly initialize the udp transport layer of eXosip, as we don't use eXosip_listen_addr() */
-       /* otherwise we have a bug with improper contacts in registers: <sip:user@host:;line=jIjijde68>*/
-       eXosip_masquerade_contact(NULL,0);
-       /*
        err=eXosip_listen_addr(proto, addr, port, ipv6 ?  PF_INET6 : PF_INET, 0);
-       */
+#ifdef HAVE_EXOSIP_GET_SOCKET
+       ms_message("Exosip has socket number %i",eXosip_get_socket(proto));
+#endif
        ctx->running=TRUE;
        return err;
 }
 
 ortp_socket_t sal_get_socket(Sal *ctx){
-       return ctx->sock;
+#ifdef HAVE_EXOSIP_GET_SOCKET
+       return eXosip_get_socket(IPPROTO_UDP);
+#else
+       ms_warning("Sorry, eXosip does not have eXosip_get_socket() method");
+       return -1;
+#endif
 }
 
 void sal_set_user_agent(Sal *ctx, const char *user_agent){
index 97ed0142377d65870aae0f7489d742a30e81dbac..0df6023a63d9da8706703d56aa09dffc405297bd 100644 (file)
@@ -38,7 +38,6 @@ struct Sal{
        MSList *other_transactions; /*MSList of SalOp */
        int running;
        int session_expires;
-       ortp_socket_t sock;
        void *up;
 };
 
index ae89236c89a25cc26dd96bf10e79f688cc36ce69..fc1775a42aef3f941fb5c0159527b93e1c85049e 100644 (file)
@@ -24,9 +24,9 @@ AC_CHECK_LIB([eXosip2],[eXosip_get_version],
        [AC_DEFINE([HAVE_EXOSIP_GET_VERSION],[1],[Defined when eXosip_get_version is available])],
        [],
        [-losipparser2 -losip2 ])
-AC_CHECK_LIB([eXosip2],[eXosip_call_get_reference],
-       [],
-       [AC_MSG_ERROR([Could not find eXosip_call_get_reference() in eXosip2 !])],
+AC_CHECK_LIB([eXosip2],[eXosip_get_socket],
+       [AC_DEFINE([HAVE_EXOSIP_GET_SOCKET],[1],[Defined when eXosip_get_socket is available])],
+       [AC_MSG_WARN([Could not find eXosip_get_socket in eXosip2 !])],
        [-losipparser2 -losip2 ])
 dnl AC_CHECK_LIB([eXosip2],[eXosip_get_naptr],
 dnl    [AC_DEFINE([HAVE_EXOSIP_NAPTR_SUPPORT],[1],[Defined when eXosip_get_naptr is available])],