Beispiel #1
0
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);    
}
Beispiel #7
0
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;
}
Beispiel #8
0
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));    
}
Beispiel #9
0
MESSAGE *BuildRemoveBindingMessage(struct Dialog *dialog)
{
    MESSAGE *remove = BuildAddBindingMessage(dialog);
    struct ExpiresHeader *e = (struct ExpiresHeader *)MessageGetHeader(HEADER_NAME_EXPIRES, remove);
    
    ExpiresHeaderSetExpires(e, 0);

    return remove;
}
Beispiel #10
0
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;
}
Beispiel #11
0
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;
}
Beispiel #12
0
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;
}
Beispiel #13
0
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;
}
Beispiel #14
0
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;
}
Beispiel #15
0
struct Header *BuildResponseCSeqHeader(MESSAGE *request)
{
    struct CSeqHeader *cseq =              
        CSeqHeaderDup((struct CSeqHeader *)MessageGetHeader(HEADER_NAME_CSEQ, request));
    return (struct Header *)cseq;
}
Beispiel #16
0
struct Header *BuildResponseCallIdHeader(MESSAGE *request)
{
    struct CallIdHeader *callId = 
        CallIdHeaderDup((struct CallIdHeader *)MessageGetHeader(HEADER_NAME_CALLID, request));
    return (struct Header *)callId;
}
Beispiel #17
0
struct Header *BuildResponseFromHeader(MESSAGE *request)
{
    CONTACT_HEADER *from = 
        ContactHeaderDup((CONTACT_HEADER *)MessageGetHeader(HEADER_NAME_FROM, request));
    return (struct Header *)from;
}
Beispiel #18
0
struct Header *BuildResponseViaHeader(MESSAGE *request)
{
    VIA_HEADER *via = ViaHeaderDup((VIA_HEADER *)MessageGetHeader(HEADER_NAME_VIA, request));
    return (struct Header *)via;
}
Beispiel #19
0
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)