/** * Sends a SUBSCRIBE message to a sip URI. * * @param hLine The handle to the line. * @param szUri Sip address of the person to subscribe to * @param winfo 0: Subscribe for presence 1: Subscribe for watcher info * @param hSub The handle to this subscription */ MY_DLLEXPORT OWPL_RESULT owplPresenceSubscribe(OWPL_LINE hLine, const char* szUri, const int winfo, OWPL_SUB *hSub) { char UriBuf[100]; char MsgBodyBuf[500]; char ProxyBuf[100]; int n = sizeof(UriBuf); int i; // SPIKE_SPIKE_SIP_SIMPLE if (phcfg.pim_disabled) { return OWPL_RESULT_SUCCESS; } owplLineGetUri(hLine, UriBuf, &n); n = sizeof(ProxyBuf); owplLineGetProxy(hLine, ProxyBuf, &n); eXosip_lock(); i = eXosip_subscribe(szUri, UriBuf, ProxyBuf, winfo); eXosip_unlock(); if (i < 0) { return OWPL_RESULT_FAILURE; } if (hSub) { *hSub = i; } return OWPL_RESULT_SUCCESS; }
OWPL_RESULT owplPresencePublish(OWPL_LINE hLine, const int Online, const char * szStatus, OWPL_PUB *hPub) { char UriBuf[100]; char MsgBodyBuf[500]; char ProxyBuf[100]; int n = sizeof(UriBuf); int i; phVLine * vl = NULL; OWSIPAccount account ; // SPIKE_SPIKE_SIP_SIMPLE if (phcfg.pim_disabled) { return OWPL_RESULT_SUCCESS; } account = owplLineSipAccountGet (hLine) ; if (account <= 0) { return OWPL_RESULT_INVALID_ARGS ; } // save infos for later user from a timer event if((vl = ph_valid_vlid(hLine)) != NULL) { vl->publishInfo.onlineState = Online; if (szStatus) { vl->publishInfo.szStatus = strdup(szStatus); } else { vl->publishInfo.szStatus = strdup(""); } vl->publishInfo.hPub = hPub; // nine minutes timeout i.e. 540s vl->publishInfo.publishTimeout = 540; vl->publishInfo.lastPublishTime = time(0); } else { return OWPL_RESULT_FAILURE; } buildPidfPayload(hLine, MsgBodyBuf, sizeof(MsgBodyBuf), Online, szStatus); n = sizeof(UriBuf); owplLineGetUri(hLine, UriBuf, &n); n = sizeof(ProxyBuf); owplLineGetProxy(hLine, ProxyBuf, &n); eXosip_lock(); i = eXosip_publish(account, UriBuf, UriBuf, ProxyBuf, 0, PRESENCE_CONTENT_TYPE, MsgBodyBuf); eXosip_unlock(); if (i != 0) { return OWPL_RESULT_FAILURE; } return OWPL_RESULT_SUCCESS; }
MY_DLLEXPORT OWPL_RESULT owplPresencePublish(OWPL_LINE hLine, const int Online, const char * szStatus, OWPL_PUB *hPub) { char UriBuf[100]; char MsgBodyBuf[500]; char ProxyBuf[100]; int n = sizeof(UriBuf); int i; phVLine * vl = NULL; // SPIKE_SPIKE_SIP_SIMPLE if (phcfg.pim_disabled) { return OWPL_RESULT_SUCCESS; } // save infos for later user from a timer event if((vl = ph_valid_vlid(hLine)) != NULL) { vl->publishInfo.onlineState = Online; if(szStatus != NULL) { vl->publishInfo.szStatus = strdup(szStatus); } vl->publishInfo.hPub = hPub; // nine minutes timeout i.e. 540s vl->publishInfo.publishTimeout = 540; vl->publishInfo.lastPublishTime = time(0); } else { return OWPL_RESULT_FAILURE; } owplLineGetUri(hLine, UriBuf, &n); snprintf(MsgBodyBuf, sizeof(MsgBodyBuf), PUBLISH_MSG_TEMPLATE, UriBuf, Online ? "open" : "close", szStatus, UriBuf); n = sizeof(ProxyBuf); owplLineGetProxy(hLine, ProxyBuf, &n); eXosip_lock(); i = eXosip_publish(UriBuf, UriBuf, ProxyBuf, 0, PRESENCE_CONTENT_TYPE, MsgBodyBuf); eXosip_unlock(); if (i != 0) { return OWPL_RESULT_FAILURE; } return OWPL_RESULT_SUCCESS; }
/** * Sends a SUBSCRIBE message to a sip URI. * * @param hLine The handle to the line. * @param szUri Sip address of the person to subscribe to * @param winfo 0: Subscribe for presence 1: Subscribe for watcher info * @param hSub The handle to this subscription */ OWPL_RESULT owplPresenceSubscribe(OWPL_LINE hLine, const char* szUri, const int winfo, OWPL_SUB *hSub) { OWSIPAccount account ; char UriBuf[100]; char ProxyBuf[100]; int n = sizeof(UriBuf); int i; // SPIKE_SPIKE_SIP_SIMPLE if (phcfg.pim_disabled) { return OWPL_RESULT_SUCCESS; } account = owplLineSipAccountGet (hLine) ; if (account <= 0) { return OWPL_RESULT_INVALID_ARGS ; } owplLineGetUri(hLine, UriBuf, &n); n = sizeof(ProxyBuf); owplLineGetProxy(hLine, ProxyBuf, &n); eXosip_lock(); i = eXosip_subscribe(account, (char *)szUri, UriBuf, ProxyBuf, winfo); eXosip_unlock(); if (i < 0) { return OWPL_RESULT_FAILURE; } if (hSub) { *hSub = i; } return OWPL_RESULT_SUCCESS; }