MY_DLLEXPORT OWPL_RESULT owplCallCreate( const OWPL_LINE hLine, OWPL_CALL * hCall) { phVLine *vl; int newCallId; phcall_t *ca; //Check hLine validity vl = ph_valid_vlid(hLine); if (!vl) { return OWPL_RESULT_INVALID_ARGS; } newCallId = getNextCallId(); ca = ph_allocate_call(newCallId); if ( ca == 0) { return OWPL_RESULT_FAILURE; } ca->vlid = hLine; *hCall = newCallId; return OWPL_RESULT_SUCCESS; }
/** * owplLineGetUserName * * Get username of the line * * @param hLine handle to the virtual line * @param szBuffer The buffer to contain the result. * @param nBuffer The size of the buffer. On return, nBuffer will contain the actual by written to the buffer. * @return OWPL_RESULT_SUCCESS in case of success. On failure, nBuffer will contain * the size needed to store the result. */ MY_DLLEXPORT OWPL_RESULT owplLineGetLocalUserName(const OWPL_LINE hLine, char* szLocalUserName, int * nBuffer) { int n = 0; phVLine *vl = 0; vl = ph_valid_vlid(hLine); if (!vl) { return OWPL_RESULT_FAILURE; } if (vl->username && strlen(vl->username)) { n += strlen(vl->username); // +1 for \0 at the end of the string } if (n >= *nBuffer) { *nBuffer = n; return OWPL_RESULT_INSUFFICIENT_BUFFER; } if (szLocalUserName) { strncpy(szLocalUserName, vl->username, n); szLocalUserName[n] = '\0'; } return OWPL_RESULT_SUCCESS; }
OWPL_RESULT owplCallConnectWithBody(const OWPL_CALL hCall, const char* szAddress, const char* szContentType, const char* szBody, int BodySize) { int i; osip_message_t *invite; char *proxy ; phVLine *vl; char from[512]; OWSIPAccount account ; phcall_t *ca = ph_locate_call_by_cid(hCall); if (ca == NULL) { return OWPL_RESULT_INVALID_ARGS ; } account = owplLineSipAccountGet (ca->vlid) ; if (account <= 0) { return OWPL_RESULT_INVALID_ARGS ; } // TODO verif des arguments if (!szAddress){ return OWPL_RESULT_INVALID_ARGS; } vl = ph_valid_vlid(ca->vlid); if (!vl) { return OWPL_RESULT_INVALID_ARGS; } ph_vline_get_from(from, sizeof(from), vl); proxy = owsip_account_proxy_get (account) ; if((i = eXosip_build_initial_invite(&invite, (char *)szAddress, from, proxy, "")) != 0){ return -1; } eXosip_lock(); i = eXosip_initiate_call_with_body(account, invite, szContentType, szBody, 0); if (i <= 0) { return OWPL_RESULT_FAILURE; } ca->extern_cid = i; ca->vlid = ph_vline2vlid(vl); eXosip_unlock(); owplAssociateCall2PluginByContentType(ca->cid, szContentType); 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; }
OWPL_RESULT owplLineSetOpts(const OWPL_LINE hLine, LineOptEnum Opt, const void *Data) { int *n; phVLine *vl = 0; char *s; OWSIPAccount account ; account = owplLineSipAccountGet (hLine) ; if (account <= 0) { return OWPL_RESULT_INVALID_ARGS ; } vl = ph_valid_vlid(hLine); if (!vl) { return OWPL_RESULT_FAILURE; } switch (Opt) { case OWPL_LINE_OPT_REG_TIMEOUT: n = (int*) Data; vl->regTimeout = *n; break; case OWPL_LINE_OPT_PROXY: s = (char*) Data; if (strcmp(owsip_account_proxy_get (account), s) != 0) { if (vl->LineState == LINESTATE_REGISTERED) { // Unregister it first owplLineRegister(hLine, 0); } owsip_account_proxy_set (account, s) ; } break; case OWPL_LINE_OPT_DOMAIN: s = (char*) Data; if (strcmp(owsip_account_domain_get (account), s) != 0) { if (vl->LineState == LINESTATE_REGISTERED) { // Unregister it first owplLineRegister(hLine, 0); } strcpy(owsip_account_domain_get (account), s); } break; case OWPL_LINE_OPT_ROUTEFILTERING: owsip_account_route_filter_enable(account, (int) Data); break; } return OWPL_RESULT_SUCCESS; }
OWPL_RESULT owplMessageSend(OWPL_LINE hLine, const char * szRemoteUri, const char * szContent, const char * szMIME, int * messageId) { phVLine *vl; char from[512]; 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 ; } if(hLine <= 0 || szRemoteUri == NULL || strlen(szRemoteUri) <= 0 || szMIME == NULL || strlen(szMIME) <= 0 || szContent == NULL || strlen(szContent) <= 0 || messageId == NULL) { return OWPL_RESULT_INVALID_ARGS; } vl = ph_valid_vlid(hLine); if(!vl) { return OWPL_RESULT_INVALID_ARGS; } ph_vline_get_from(from, sizeof(from), vl); eXosip_lock(); * messageId = eXosip_message ( account, (char *) szRemoteUri, from, owsip_account_proxy_get (account), (char *) szContent, (char *) szMIME ) ; eXosip_unlock(); return OWPL_RESULT_SUCCESS; }
MY_DLLEXPORT OWPL_RESULT owplLineIsBusy(OWPL_LINE hLine, unsigned int * bBusy) { phVLine *vl = ph_valid_vlid(hLine); if(!vl) { return OWPL_RESULT_FAILURE; } *bBusy = vl->busy; return OWPL_RESULT_SUCCESS; }
/** * owplLineSetAutoKeepAlive * * Get the proxy address of the line * * @param hLine handle to the virtual line * @param Enabled 1: Enabled, 0: Disabled * @param Period The timeout period between 2 keep alive messages (in seconds) * @return OWPL_RESULT */ MY_DLLEXPORT OWPL_RESULT owplLineSetAutoKeepAlive(OWPL_LINE hLine, unsigned int Enabled, unsigned int Period) { phVLine *vl = ph_valid_vlid(hLine); if(!vl) { return OWPL_RESULT_FAILURE; } vl->keepAliveInfo.enabled = Enabled; vl->keepAliveInfo.period = Period; vl->keepAliveInfo.lastSentTime = time(0); 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; }
MY_DLLEXPORT OWPL_RESULT owplLineSetOpts(const OWPL_LINE hLine, LineOptEnum Opt, const void *Data) { int *n; phVLine *vl = 0; char *s; vl = ph_valid_vlid(hLine); if (!vl) { return OWPL_RESULT_FAILURE; } switch (Opt) { case OWPL_LINE_OPT_REG_TIMEOUT: n = (int*) Data; vl->regTimeout = *n; break; case OWPL_LINE_OPT_PROXY: s = (char*) Data; if (strcmp(vl->proxy, s) != 0) { if (vl->LineState == LINESTATE_REGISTERED) { // Unregister it first owplLineRegister(hLine, 0); } strcpy(vl->proxy, s); } break; case OWPL_LINE_OPT_DOMAIN: s = (char*) Data; if (strcmp(vl->server, s) != 0) { if (vl->LineState == LINESTATE_REGISTERED) { // Unregister it first owplLineRegister(hLine, 0); } strcpy(vl->server, s); } break; } return OWPL_RESULT_SUCCESS; }
MY_DLLEXPORT OWPL_RESULT owplMessageSend(OWPL_LINE hLine, const char * szRemoteUri, const char * szContent, const char * szMIME, int * messageId) { int i; phVLine *vl; char from[512]; // SPIKE_SPIKE_SIP_SIMPLE if (phcfg.pim_disabled) { return OWPL_RESULT_SUCCESS; } if(hLine <= 0 || szRemoteUri == NULL || strlen(szRemoteUri) <= 0 || szMIME == NULL || strlen(szMIME) <= 0 || szContent == NULL || strlen(szContent) <= 0 || messageId == NULL) { return OWPL_RESULT_INVALID_ARGS; } vl = ph_valid_vlid(hLine); if(!vl) { return OWPL_RESULT_INVALID_ARGS; } ph_vline_get_from(from, sizeof(from), vl); eXosip_lock(); *messageId = eXosip_message((char *)szRemoteUri, from, vl->proxy, szContent, szMIME); eXosip_unlock(); return OWPL_RESULT_SUCCESS; }
/** * owplLineGetUri * * Get uri of the line * * @param hLine handle to the virtual line * @param szBuffer The buffer to contain the result. * @param nBuffer The size of the buffer. If * @return OWPL_RESULT_SUCCESS in case of success. On failure, nBuffer will contain * the size needed to store the result. */ MY_DLLEXPORT OWPL_RESULT owplLineGetUri(const OWPL_LINE hLine, char* szBuffer, int * nBuffer) { char tmp[10]; int n = 0; phVLine *vl = 0; vl = ph_valid_vlid(hLine); if (!vl) { return OWPL_RESULT_FAILURE; } if (vl->server && strlen(vl->server)) { n += strlen(vl->server); } if (vl->username && strlen(vl->username)) { n += strlen(vl->username); } if (vl->port != 5060) { snprintf(tmp, sizeof(tmp), "%d", vl->port); n += strlen(tmp) + 1; } n += 5; if (n > *nBuffer) { *nBuffer = n; return OWPL_RESULT_INSUFFICIENT_BUFFER; } if (szBuffer) { if (vl->port != 5060) { snprintf(szBuffer, *nBuffer, "sip:%s@%s:%d", vl->username, vl->server, vl->port); } else { snprintf(szBuffer, *nBuffer, "sip:%s@%s", vl->username, vl->server); } } return OWPL_RESULT_SUCCESS; }