BOOL TransactionMatched(struct Transaction *t, char *branch, char *seqMethod) { MESSAGE *request = GetTransactionRequest(t); return ViaHeaderBranchMatchedByString((VIA_HEADER *)MessageGetHeader(HEADER_NAME_VIA, request), branch) && CSeqMethodMatchedByName((struct CSeqHeader *)MessageGetHeader(HEADER_NAME_CSEQ, request), seqMethod); }
TEST(TryingMessageBuildTestGroup, TryingMessageFromHeaderTest) { MESSAGE *invite = CreateMessage(); ParseMessage(INCOMMING_INVITE_MESSAGE, invite); MESSAGE *trying = BuildResponse(invite, STATUS_CODE_TRYING); CONTACT_HEADER *inviteFrom = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_FROM, invite); CONTACT_HEADER *tryingFrom = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_FROM, trying); CHECK_TRUE(ContactHeaderMatched(inviteFrom, tryingFrom)); DestroyMessage(&trying); DestroyMessage(&invite); }
TEST(TryingMessageBuildTestGroup, TryingMessageViaTest) { MESSAGE *invite = CreateMessage(); ParseMessage(INCOMMING_INVITE_MESSAGE, invite); MESSAGE *trying = BuildResponse(invite, STATUS_CODE_TRYING); VIA_HEADER *inviteVia = (VIA_HEADER *)MessageGetHeader(HEADER_NAME_VIA, invite); VIA_HEADER *tryingVia = (VIA_HEADER *)MessageGetHeader(HEADER_NAME_VIA, trying); CHECK_TRUE(ViaHeaderMatched(inviteVia, tryingVia)); DestroyMessage(&trying); DestroyMessage(&invite); }
TEST(TryingMessageBuildTestGroup, TryingMessageCSeqTest) { MESSAGE *invite = CreateMessage(); ParseMessage(INCOMMING_INVITE_MESSAGE, invite); MESSAGE *trying = BuildResponse(invite, STATUS_CODE_TRYING); struct CSeqHeader *inviteCSeq = (struct CSeqHeader *)MessageGetHeader(HEADER_NAME_CSEQ, invite); struct CSeqHeader *tryingCSeq = (struct CSeqHeader *)MessageGetHeader(HEADER_NAME_CSEQ, trying); CHECK_TRUE(CSeqHeadersMatched(inviteCSeq, tryingCSeq)); DestroyMessage(&trying); DestroyMessage(&invite); }
TEST(TryingMessageBuildTestGroup, TryingMessageCallIdTest) { MESSAGE *invite = CreateMessage(); ParseMessage(INCOMMING_INVITE_MESSAGE, invite); MESSAGE *trying = BuildResponse(invite, STATUS_CODE_TRYING); struct CallIdHeader *inviteCallId = (struct CallIdHeader *)MessageGetHeader(HEADER_NAME_CALLID, invite); struct CallIdHeader *tryingCallId = (struct CallIdHeader *)MessageGetHeader(HEADER_NAME_CALLID, trying); CHECK_TRUE(CallIdHeaderMatched(inviteCallId, tryingCallId)); DestroyMessage(&trying); DestroyMessage(&invite); }
TEST(TryingMessageBuildTestGroup, TryingMessageToWithTagTest) { MESSAGE *invite = CreateMessage(); ParseMessage(INCOMMING_INVITE_MESSAGE_WITH_TO_TAG, invite); MESSAGE *trying = BuildResponse(invite, STATUS_CODE_TRYING); CONTACT_HEADER *inviteTo = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_TO, invite); CONTACT_HEADER *tryingTo = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_TO, trying); CHECK_TRUE(ContactHeaderMatched(inviteTo, tryingTo)); DestroyMessage(&trying); DestroyMessage(&invite); }
struct AuthHeader *BuildAuthHeader(MESSAGE *authMessage, struct Dialog *dialog, MESSAGE *challenge) { struct AuthHeader *authHeader = CreateAuthorizationHeader(dialog); struct UserAgent *ua = DialogGetUserAgent(dialog); struct Account *account = UaGetAccount(ua); char response[MD5_HASH_LENGTH + 1] = {0}; AuthHeaderSetScheme(authHeader, DIGEST); AuthHeaderSetParameter(authHeader, AUTH_HEADER_USER_NAME, AccountGetUserName(account)); AddAuthHeaderUri(authMessage, authHeader); struct AuthHeader *challengeAuthHeader = (struct AuthHeader *)MessageGetHeader(HEADER_NAME_WWW_AUTHENTICATE, challenge); AuthHeaderSetParameter(authHeader, AUTH_HEADER_REALM, AuthHeaderGetParameter(challengeAuthHeader, AUTH_HEADER_REALM)); AuthHeaderSetParameter(authHeader, AUTH_HEADER_NONCE, AuthHeaderGetParameter(challengeAuthHeader, AUTH_HEADER_NONCE)); CalculateResponse(AccountGetAuthName(account), AccountGetPasswd(account), AuthHeaderGetParameter(authHeader,AUTH_HEADER_URI), AuthHeaderGetParameter(challengeAuthHeader, AUTH_HEADER_REALM), AuthHeaderGetParameter(challengeAuthHeader, AUTH_HEADER_NONCE), response); AuthHeaderSetParameter(authHeader, AUTH_HEADER_RESPONSE, response); AuthHeaderSetParameter(authHeader, AUTH_HEADER_ALGORITHM, ALGORITHM_MD5); return authHeader; }
void SetToHeaderUserName(MESSAGE *message, struct Dialog *dialog) { CONTACT_HEADER *toHeader = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_TO, message); struct UserAgent *ua = DialogGetUserAgent(dialog); struct Account *account = UaGetAccount(ua); UriSetUser(ContactHeaderGetUri(toHeader), AccountGetUserName(account)); }
MESSAGE *BuildRemoveBindingMessage(struct Dialog *dialog) { MESSAGE *remove = BuildAddBindingMessage(dialog); struct ExpiresHeader *e = (struct ExpiresHeader *)MessageGetHeader(HEADER_NAME_EXPIRES, remove); ExpiresHeaderSetExpires(e, 0); return remove; }
MESSAGE *BuildByeMessage(struct Dialog *dialog) { MESSAGE *bye = BuildRequest(dialog, SIP_METHOD_BYE); CONTACT_HEADER *to = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_TO, bye); struct Parameters *ps = ContactHeaderGetParameters(to); AddParameter(ps, HEADER_PARAMETER_NAME_TAG, DialogGetRemoteTag(dialog)); return bye; }
MESSAGE *BuildInviteMessage(struct Dialog *dialog, char *to) { MESSAGE *invite = BuildRequest(dialog, SIP_METHOD_INVITE); struct ContactHeader *toHeader = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_TO, invite); struct RequestLine *rl = (struct RequestLine *)MessageGetRequestLine(invite); UriSetUser(RequestLineGetUri(rl), to); UriSetUser(ContactHeaderGetUri(toHeader), to); return invite; }
MESSAGE *BuildAuthorizationMessage(struct Dialog *dialog, MESSAGE *challenge) { MESSAGE *message = BuildRequest(dialog, SIP_METHOD_REGISTER); char *callid = MessageGetCallId(challenge); struct CallIdHeader *callidHeader = (struct CallIdHeader *)MessageGetHeader(HEADER_NAME_CALLID, message); CallIdHeaderSetID(callidHeader, callid); SetToHeaderUserName(message, dialog); MessageAddHeader(message, (struct Header *)BuildAuthHeader(message,dialog, challenge)); return message; }
struct Header *BuildResponseToHeader(MESSAGE *request) { char tag[MAX_TAG_LENGTH] = {0}; CONTACT_HEADER *to = ContactHeaderDup((CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_TO, request)); BuildResponseToTag(tag, request); if (ContactHeaderGetParameter(to, HEADER_PARAMETER_NAME_TAG) == NULL) { ContactHeaderSetParameter(to, HEADER_PARAMETER_NAME_TAG, tag); } return (struct Header *)to; }
MESSAGE *BuildAckMessageWithinClientTransaction(MESSAGE *invite) { assert(invite != NULL); MESSAGE *ack = CreateMessage(); struct RequestLine *rl = RequestLineDup(MessageGetRequestLine(invite)); SetMessageType(ack, MESSAGE_TYPE_REQUEST); RequestLineSetMethod(rl, SIP_METHOD_NAME_ACK); SetMessageRequestLine(ack, rl); AddResponseHeaders(ack, invite); struct CSeqHeader *cseq = (struct CSeqHeader *)MessageGetHeader(HEADER_NAME_CSEQ, ack); CSeqHeaderSetMethod(cseq, SIP_METHOD_NAME_ACK); return ack; }
struct Header *BuildResponseCSeqHeader(MESSAGE *request) { struct CSeqHeader *cseq = CSeqHeaderDup((struct CSeqHeader *)MessageGetHeader(HEADER_NAME_CSEQ, request)); return (struct Header *)cseq; }
struct Header *BuildResponseCallIdHeader(MESSAGE *request) { struct CallIdHeader *callId = CallIdHeaderDup((struct CallIdHeader *)MessageGetHeader(HEADER_NAME_CALLID, request)); return (struct Header *)callId; }
struct Header *BuildResponseFromHeader(MESSAGE *request) { CONTACT_HEADER *from = ContactHeaderDup((CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_FROM, request)); return (struct Header *)from; }
struct Header *BuildResponseViaHeader(MESSAGE *request) { VIA_HEADER *via = ViaHeaderDup((VIA_HEADER *)MessageGetHeader(HEADER_NAME_VIA, request)); return (struct Header *)via; }
void ExtractRemoteTarget(struct Dialog *dialog, MESSAGE *message) { CONTACT_HEADER *c = (CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_CONTACT, message); URI *uri = ContactHeaderGetUri(c); dialog->remoteTarget = UriDup(uri); }
END_IMPL //------------------------------------------------------------------------ CONCEPT_FUNCTION_IMPL(MessageMarkAsRead, 2) T_NUMBER(MessageMarkAsRead, 0) // CMAPIMessage T_NUMBER(MessageMarkAsRead, 1) // int RETURN_NUMBER(MessageMarkAsRead((CMAPIMessage *)PARAM_INT(0), (int)PARAM(1))) END_IMPL //------------------------------------------------------------------------ CONCEPT_FUNCTION_IMPL(MessageGetHeader, 3) T_NUMBER(MessageGetHeader, 0) // CMAPIMessage //T_STRING_NULL(1) // char* T_NUMBER(MessageGetHeader, 2) // int PROP(2) RETURN_NUMBER(MessageGetHeader((CMAPIMessage *)PARAM_INT(0), value, (int)PARAM(2))) RET(1) END_IMPL //------------------------------------------------------------------------ CONCEPT_FUNCTION_IMPL(MessageGetSenderName, 3) T_NUMBER(MessageGetSenderName, 0) // CMAPIMessage //T_STRING_NULL(1) // char* T_NUMBER(MessageGetSenderName, 2) // int PROP(2) MessageGetSenderName((CMAPIMessage *)PARAM_INT(0), value, (int)PARAM(2)); RET(1) RETURN_NUMBER(0) END_IMPL //------------------------------------------------------------------------ CONCEPT_FUNCTION_IMPL(MessageGetSenderEmail, 3)