TunnelManager* lTunnelMgr=(TunnelManager*)userdata;
if (tv!=0 && tv->tv_sec){
/*this is the select from udp.c, the one that is interesting to us*/
- unsigned int i;
+ int i;
int udp_fd=eXosip_get_udp_socket();
int controlfd=-1;
mCallbackData=userdata;
}
-static void sCloseRtpTransport(void *userData, RtpTransport *t){
- ((TunnelManager::TunnelManager *) userData)->closeRtpTransport(t);
+static void sCloseRtpTransport(RtpTransport *t, void *userData){
+ TunnelSocket *s=(TunnelSocket*)userData;
+ TunnelManager::TunnelManager *manager=(TunnelManager::TunnelManager*)s->getUserPointer();
+ manager->closeRtpTransport(t, s);
}
-void TunnelManager::closeRtpTransport(RtpTransport *t){
- TunnelSocket *socket=(TunnelSocket *) t->data;
- mTransports.remove(t);
- mTunnelClient->closeSocket(socket);
+void TunnelManager::closeRtpTransport(RtpTransport *t, TunnelSocket *s){
+ mTunnelClient->closeSocket(s);
ms_free(t);
}
}
RtpTransport *TunnelManager::createRtpTransport(int port){
+ TunnelSocket *socket=mTunnelClient->createSocket(port);
+ socket->setUserPointer(this);
RtpTransport *t=ms_new0(RtpTransport,1);
- t->data=mTunnelClient->createSocket(port);
t->t_getsocket=NULL;
t->t_recvfrom=customRecvfrom;
t->t_sendto=customSendto;
- t->close_fn=sCloseRtpTransport;
- t->close_data=this;
- mTransports.push_back(t);
+ t->t_close=sCloseRtpTransport;
+ t->data=socket;
return t;
}
/**
* Destroy the given RtpTransport.
*/
- void closeRtpTransport(RtpTransport *t);
+ void closeRtpTransport(RtpTransport *t, TunnelSocket *s);
/**
* Create an RtpTransport.
LinphoneCore *getLinphoneCore();
private:
typedef std::list<UdpMirrorClient> UdpMirrorClientList;
- typedef std::list<RtpTransport*> RtpTransportList;
virtual bool isStarted();
virtual bool isReady() const;
static int customSendto(struct _RtpTransport *t, mblk_t *msg , int flags, const struct sockaddr *to, socklen_t tolen);
void stopClient();
static Mutex sMutex;
bool mAutoDetectStarted;
- RtpTransportList mTransports;
LinphoneRtpTransportFactories mTransportFactories;
};