Hi, i have memory leaks in an app i wrote so i created a simple app that
should register to a sip Registrar (and in fact it does) to try to track
down this problem.
However i must be using the libraries (i use just sipXtack and sipXport) in
the wrong way because i am experiencing a memory leak on each
SipUserAgent->send(SipMessage) i am doing.
thanks a lot
#include <net/SipUserAgent.h>
class SipServer: public OsServerTask {
public:
SipServer(char *ip, int port, int vb);
~SipServer();
virtual UtlBoolean handleMessage(OsMsg& eventMessage);
void doRegister(char*,char*,char*);
SipUserAgent *endPoint;
private:
int mvb;
OsMsgQ* queue;
SipMessage *msgRegister;
};
UtlBoolean SipServer::handleMessage(OsMsg& eventMessage)
{
int msgType = eventMessage.getMsgType();
int msgSubType = eventMessage.getMsgSubType();
int seq;
UtlBoolean ret = TRUE;
if ((msgType == OsMsg::PHONE_APP) && (msgSubType == SipMessage::NET_SIP_MESSAGE)) {
const SipMessage* sipMsg = ((SipMessageEvent&)eventMessage).getMessage();
UtlString method;
/*if (sipMsg->isResponse()) {
return ret;
}*/
if (sipMsg->getCSeqField(&seq, &method)) {
if (mvb) {
UtlString data;
int len;
sipMsg->getBytes(&data,&len);
printf(data.data());
}
if (0==method.compareTo(SIP_INVITE_METHOD, UtlString::ignoreCase)) {
if (mvb) {
UtlString data;
int len;
sipMsg->getBytes(&data,&len);
printf(data.data());
}
SipMessage Response;
Response.setInviteBusyData(sipMsg);
endPoint->send(Response);
}
}
}
return ret;
}
SipServer::SipServer(char *ip, int port, int vb)
{
endPoint = new SipUserAgent(port,port,0, ip, "sipX", ip);
endPoint->addMessageObserver(*this->getMessageQueue(),
NULL,
TRUE,
TRUE,
TRUE,
FALSE);
mvb = vb;
msgRegister=0;
endPoint->allowMethod(SIP_INVITE_METHOD);
endPoint->allowMethod(SIP_ACK_METHOD);
endPoint->allowMethod(SIP_CANCEL_METHOD);
endPoint->allowMethod(SIP_BYE_METHOD);
endPoint->allowMethod(SIP_REFER_METHOD);
endPoint->allowMethod(SIP_OPTIONS_METHOD);
endPoint->start();
endPoint->startMessageLog();
start();
}
SipServer::~SipServer()
{
delete endPoint;
}
void
SipServer::doRegister(char *pUserUri, char *pContactHeader, char *pOutboundProxyIpAndPort)
{
if (msgRegister)
{
delete msgRegister;
printf("Deleted old msgRegister\n");
}
static int iRegisterCSeqNumber = 1;
msgRegister = new SipMessage();
msgRegister->setRegisterData(pUserUri,pUserUri,pOutboundProxyIpAndPort,pContactHeader,"12345",iRegisterCSeqNumber,60);
endPoint->send(*msgRegister);
}
#include <signal.h>
typedef void (*sighandler_t)(int);
static int R = 1;
static int handle_SIGINT(int sig)
{
R = 0;
return 0;
}
int main(int argc, char *argv[]) {
SipServer *Server;
char *ip[2];
ip[0] = "192.168.23.10";
ip[1] = "192.168.93.10";
int port = 5080;
int vb = 1;
if (argc > 1) {
ip[0] = argv[1];
}
if (argc > 2) {
port = atoi(argv[2]);
}
if (argc > 3) {
vb = 1;
}
for (int j=0; j<1; j++)
{
Server = new SipServer(ip[j%2], port, vb);
signal(SIGINT, (sighandler_t) handle_SIGINT);
int i=0;
while(R && i <200) {
Sleep(200);
printf("pass: %d\n",i++);
//if (i%10==0)
if (j%2==0)
Server->doRegister("<sip:[EMAIL PROTECTED]>","<sip:[EMAIL PROTECTED]:5080>","192.168.23.21:4000");
else
Server->doRegister("<sip:[EMAIL PROTECTED]>","<sip:[EMAIL PROTECTED]:5080>","192.168.93.21:4000");
//sched_yield();
}
printf("ShutDown\n");
Sleep(2000);
delete Server;
printf("DONE\n");
}
}_______________________________________________
sipxtapi-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/