721 lines
18 KiB
C
721 lines
18 KiB
C
#ifndef _SIP__H
|
|
#define _SIP__H
|
|
|
|
#include "sip_pub.h"
|
|
|
|
// SIP general constant
|
|
#define SIP_MAX_USER_NAME_LEN 64//128
|
|
#define SIP_MAX_PASSWORD_LEN 16
|
|
#define SIP_MAX_DOMAIN_NAME_LEN 128//256
|
|
#define SIP_MAX_REASON_PHRASE_LEN 128
|
|
#define SIP_MAX_HDR_FLAG_NUM 2
|
|
#define SIP_MAX_BODY_LEN 1500
|
|
#define SIP_MAX_DISPLAY_NAME_LEN 64
|
|
#define SIP_MAX_CALL_ID_LEN 128
|
|
#define SIP_MAX_GEN_PARA_NUM 8
|
|
#define SIP_MAX_PARA_STRING_LEN 64//128
|
|
#define SIP_MAX_PARA_VAL_LEN 4
|
|
#define SIP_MAX_PARA_NUM 4//8
|
|
#define SIP_MAX_NUM_OF_TRANS 4096//8192
|
|
#define SIP_MAX_NUM_OF_VIAS 8//32
|
|
#define SIP_MAX_NUM_OF_CONTACTS 4
|
|
#define SIP_MAX_NUM_OF_RECORD_ROUTES 8//32
|
|
#define SIP_MAX_NUM_OF_ROUTES 8//32
|
|
#define SIP_MAX_NUM_OF_ALLOW 8//32
|
|
#define SIP_MAX_NUM_OF_ACCEPT 8
|
|
#define SIP_MAX_NUM_OF_ACCEPT_ENCODING 4
|
|
#define SIP_MAX_NUM_OF_ACCEPT_LANGUAGE 8
|
|
#define SIP_MAX_LENGTH_OF_EVENT 32
|
|
#define SIP_MAX_LENGTH_OF_USER_AGENT 64
|
|
#define SIP_MAX_LENGTH_OF_SUBJECT 128
|
|
#define SIP_MAX_LENGTH_OF_SUB_STATE 128
|
|
#define SIP_MAX_VIA_DOMAIN_NAME_LEN 64
|
|
|
|
#define SIP_MAX_NUM_OF_SIP_SUB_BODY 2
|
|
|
|
#define SIP_URI_TYPE_SIP 1
|
|
#define SIP_URI_TYPE_SIPS 2
|
|
#define SIP_URI_TYPE_TEL 3
|
|
|
|
#define SIP_API_TYPE_REQUEST 1
|
|
#define SIP_API_TYPE_RESPONSE 2
|
|
#define SIP_API_TYPE_MANAGEMENT 3
|
|
|
|
#define SIP_API_PNAME_TAG 1
|
|
#define SIP_API_PNAME_BRANCH 2
|
|
#define SIP_API_PNAME_EXPIRES 3
|
|
#define SIP_API_PNAME_USER 4
|
|
#define SIP_API_PNAME_LR 5
|
|
#define SIP_API_PNAME_BOUNDARY 6
|
|
#define SIP_API_PNAME_HANDLING 7
|
|
#define SIP_API_PNAME_TRANSPORT 8
|
|
#define SIP_API_PNAME_RPOTR 9
|
|
#define SIP_API_PNAME_VERSION 10
|
|
#define SIP_API_PNAME_BASE 11
|
|
|
|
#define SIP_API_PTYPE_STRING 1
|
|
#define SIP_API_PTYPE_VALUE 2
|
|
#define SIP_API_PTYPE_TAG 3
|
|
|
|
#define SIP_API_PROTO_UDP 1
|
|
#define SIP_API_PROTO_TCP 2
|
|
#define SIP_API_PROTO_SCTP 3
|
|
|
|
#define SIP_NULL_TRANS_ID 0xFFFF
|
|
#define SIP_NULL_UP_PORT 0xFFFF
|
|
|
|
#define SIP_TRANSPORT_LAYER 1
|
|
#define SIP_TRANSACTION_LAYER 2
|
|
|
|
#define SIP_API_REQ_MSG 1
|
|
#define SIP_API_RES_MSG 2
|
|
#define SIP_API_MANAGE_MSG 3
|
|
|
|
#define SIP_TRANS_CLIENT 1
|
|
#define SIP_TRANS_SERVER 2
|
|
|
|
#define SIP_TRANS_INVITE 1
|
|
#define SIP_TRANS_NON_INVITE 2
|
|
|
|
#define SIP_ACCEPT_TYPE_APPLICATION 1
|
|
#define SIP_ACCEPT_TYPE_MULTIPART 2
|
|
#define SIP_ACCEPT_TYPE_WILDCARD 3
|
|
|
|
#define SIP_ACCEPT_SUB_TYPE_SDP 1
|
|
#define SIP_ACCEPT_SUB_TYPE_ISUP 2
|
|
#define SIP_ACCEPT_SUB_TYPE_MIXED 3
|
|
#define SIP_ACCEPT_SUB_TYPE_WILDCARD 4
|
|
|
|
#define SIP_ACCEPT_ENCODING_IDENTITY 1
|
|
#define SIP_ACCEPT_ENCODING_GZIP 2
|
|
#define SIP_ACCEPT_ENCODING_TAR 3
|
|
|
|
#define SIP_ACCEPT_LANGUAGE_EN 1
|
|
|
|
#define SIP_CONTENT_TYPE_APPLICATION 1
|
|
#define SIP_CONTENT_TYPE_MULTIPART 2
|
|
#define SIP_CONTENT_TYPE_TEXT 3
|
|
#define SIP_CONTENT_TYPE_IMAGE 4
|
|
#define SIP_CONTENT_TYPE_AUDIO 5
|
|
#define SIP_CONTENT_TYPE_VEDIO 6
|
|
|
|
#define SIP_CONTENT_SUB_TYPE_SDP 1
|
|
#define SIP_CONTENT_SUB_TYPE_ISUP 2
|
|
#define SIP_CONTENT_SUB_TYPE_MIXED 3
|
|
#define SIP_CONTENT_SUB_TYPE_MESSAGE 4
|
|
#define SIP_CONTENT_SUB_TYPE_SIGNED 5
|
|
#define SIP_CONTENT_SUB_TYPE_PKCS7_MIME 6
|
|
|
|
#define SIP_CONTENT_DISPOSITION_SIGNAL 1
|
|
|
|
#define SIP_CONTENT_ENCODING_IDENTITY 1
|
|
#define SIP_CONTENT_ENCODING_GZIP 2
|
|
#define SIP_CONTENT_ENCODING_TAR 3
|
|
|
|
#define SIP_CONTENT_LANGUAGE_EN 1
|
|
|
|
#define SIP_DATE_TYPE_GMT 1
|
|
|
|
#define SIP_DATE_WEEK_DAY_SUN 1
|
|
#define SIP_DATE_WEEK_DAY_MON 2
|
|
#define SIP_DATE_WEEK_DAY_TUE 3
|
|
#define SIP_DATE_WEEK_DAY_WED 4
|
|
#define SIP_DATE_WEEK_DAY_THU 5
|
|
#define SIP_DATE_WEEK_DAY_FRI 6
|
|
#define SIP_DATE_WEEK_DAY_SAT 7
|
|
|
|
#define SIP_DATE_MONTH_JAN 1
|
|
#define SIP_DATE_MONTH_FEB 2
|
|
#define SIP_DATE_MONTH_MAR 3
|
|
#define SIP_DATE_MONTH_APR 4
|
|
#define SIP_DATE_MONTH_MAY 5
|
|
#define SIP_DATE_MONTH_JUN 6
|
|
#define SIP_DATE_MONTH_JUL 7
|
|
#define SIP_DATE_MONTH_AUG 8
|
|
#define SIP_DATE_MONTH_SEP 9
|
|
#define SIP_DATE_MONTH_OCT 10
|
|
#define SIP_DATE_MONTH_NOV 11
|
|
#define SIP_DATE_MONTH_DEC 12
|
|
|
|
#define SIP_OPTION_TAG_100_REL 1
|
|
#define SIP_OPTION_TAG_FOO 2
|
|
|
|
#define SIP_TRANSACTION_TIMEOUT 99
|
|
#define SIP_TRANSPORT_ERROR 98
|
|
|
|
// SIP general headers mask
|
|
#define SIP_HDR_ACCEPT_MASK 0x00000001
|
|
#define SIP_HDR_ACCEPT_ENCODING_MASK 0x00000002
|
|
#define SIP_HDR_ACCEPT_LANGUAGE_MASK 0x00000004
|
|
#define SIP_HDR_ALLOW_MASK 0x00000008
|
|
#define SIP_HDR_CALL_ID_MASK 0x00000010
|
|
#define SIP_HDR_CONTACT_MASK 0x00000020
|
|
#define SIP_HDR_CSEQ_MASK 0x00000040
|
|
#define SIP_HDR_DATE_MASK 0x00000080
|
|
#define SIP_HDR_EXPIRES_MASK 0x00000100
|
|
#define SIP_HDR_FROM_MASK 0x00000200
|
|
#define SIP_HDR_TO_MASK 0x00000400
|
|
#define SIP_HDR_VIA_MASK 0x00000800
|
|
#define SIP_HDR_CONTENT_DISPOSITION_MASK 0x00001000
|
|
#define SIP_HDR_CONTENT_TYPE_MASK 0x00002000
|
|
#define SIP_HDR_CONTENT_ENCODING_MASK 0x00004000
|
|
#define SIP_HDR_CONTENT_LANGUAGE_MASK 0x00008000
|
|
#define SIP_HDR_CONTENT_LENGTH_MASK 0x00010000
|
|
#define SIP_HDR_RECORD_ROUTE_MASK 0x00020000
|
|
#define SIP_HDR_TIMESTAMP_MASK 0x00040000
|
|
#define SIP_HDR_MIME_VERSION_MASK 0x00080000
|
|
#define SIP_HDR_SUPPORTED_MASK 0x00100000
|
|
#define SIP_HDR_USER_AGENT_MASK 0x00200000
|
|
|
|
// SIP request headers mask
|
|
#define SIP_HDR_MAX_FORWARDS_MASK 0x00000001
|
|
#define SIP_HDR_ROUTE_MASK 0x00000002
|
|
#define SIP_HDR_PROXY_REQUIRE_MASK 0x00000004
|
|
#define SIP_HDR_SUBJECT_MASK 0x00000008
|
|
#define SIP_HDR_REQUIRE_MASK 0x00000010
|
|
#define SIP_HDR_REFER_TO_MASK 0x00000020
|
|
#define SIP_HDR_EVENT_MASK 0x00000040
|
|
#define SIP_HDR_SUBSCRIPTION_STATE_MASK 0x00000080
|
|
|
|
//SIP response headers mask
|
|
#define SIP_HDR_UNSUPPORTED_MASK 0x00000001//just used in 420 response
|
|
#define SIP_HDR_SERVER_MASK 0x00000002
|
|
|
|
#define SIP_METHOD_REGISTER 1
|
|
#define SIP_METHOD_INVITE 2
|
|
#define SIP_METHOD_ACK 3
|
|
#define SIP_METHOD_CANCEL 4
|
|
#define SIP_METHOD_BYE 5
|
|
#define SIP_METHOD_OPTIONS 6
|
|
#define SIP_METHOD_INFO 7
|
|
#define SIP_METHOD_PRACK 8
|
|
#define SIP_METHOD_UPDATE 9
|
|
#define SIP_METHOD_REFER 10
|
|
#define SIP_METHOD_NOTIFY 11
|
|
#define SIP_METHOD_RE_INVITE 12
|
|
|
|
#define SIP_METHOD_RESPONSE_INV_RINGING 30
|
|
#define SIP_METHOD_RESPONSE_INV_PROGRESS 31
|
|
#define SIP_METHOD_RESPONSE_INV_CONFIRM 32
|
|
#define SIP_METHOD_RESPONSE_INV_REDIR 33
|
|
#define SIP_METHOD_RESPONSE_INV_REL 34
|
|
#define SIP_METHOD_RESPONSE_CANCEL 35
|
|
#define SIP_METHOD_RESPONSE_BYE 36
|
|
#define SIP_METHOD_RESPONSE_CONFIRM 37//just for other method response
|
|
#define SIP_METHOD_RESPONSE_REL 38//just for other method response
|
|
#define SIP_METHOD_RESPONSE_TIMEOUT 39
|
|
#define SIP_METHOD_RESPONSE_RE_INV_RINGING 40
|
|
#define SIP_METHOD_RESPONSE_RE_INV_PROGRESS 41
|
|
#define SIP_METHOD_RESPONSE_RE_INV_CONFIRM 43
|
|
#define SIP_METHOD_RESPONSE_RE_INV_RETRANSMIT 44
|
|
#define SIP_METHOD_RESPONSE_RE_INV_FAILED 45
|
|
#define SIP_METHOD_RESPONSE_RE_INV_RELEASE 46
|
|
#define SIP_METHOD_RESPONSE_UPDATE_CONFIRM 47
|
|
#define SIP_METHOD_RESPONSE_UPDATE_FAILED 48
|
|
|
|
#define SIP_PROXY_TYPE_NONE 0
|
|
#define SIP_PROXY_TYPE_STATEFUL 1
|
|
#define SIP_PROXY_TYPE_STATELESS 2
|
|
|
|
// SIP general parameters struct
|
|
|
|
typedef struct _SIP_GEN_PARA
|
|
{
|
|
BYTE paraName;
|
|
BYTE paraType;
|
|
// char paraStr[SIP_MAX_PARA_STRING_LEN];
|
|
// DWORD paraVal[SIP_MAX_PARA_VAL_LEN];
|
|
union
|
|
{
|
|
char paraStr[SIP_MAX_PARA_STRING_LEN];
|
|
DWORD paraVal[SIP_MAX_PARA_VAL_LEN];
|
|
}para;
|
|
|
|
}SIP_GEN_PARA;
|
|
|
|
typedef struct _SIP_GEN_PARAMS
|
|
{
|
|
BYTE paraNum;
|
|
SIP_GEN_PARA para[SIP_MAX_PARA_NUM];
|
|
}SIP_GEN_PARAMS;
|
|
|
|
// SIP URI struct
|
|
typedef struct _SIP_URI
|
|
{
|
|
BYTE uriType;
|
|
char userName[SIP_MAX_USER_NAME_LEN];
|
|
char password[SIP_MAX_PASSWORD_LEN];
|
|
struct
|
|
{
|
|
BYTE type;
|
|
union
|
|
{
|
|
DWORD ipV4;
|
|
DWORD ipV6[4];
|
|
char domain[SIP_MAX_DOMAIN_NAME_LEN];
|
|
}addr;
|
|
}host;
|
|
WORD port;
|
|
BYTE transport;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_URI;
|
|
|
|
typedef struct _SIP_VIA_URI
|
|
{
|
|
char domain[SIP_MAX_VIA_DOMAIN_NAME_LEN];
|
|
WORD port;
|
|
// SIP_GEN_PARAMS params;
|
|
}SIP_VIA_URI;
|
|
|
|
// SIP general header struct
|
|
|
|
typedef struct _SIP_HDR_ACCEPT
|
|
{
|
|
BYTE type;
|
|
BYTE subType;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_ACCEPT;
|
|
|
|
typedef struct _SIP_HDR_ACCEPT_ENCODING
|
|
{
|
|
BYTE acceptEncoding;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_ACCEPT_ENCODING;
|
|
|
|
typedef struct _SIP_HDR_ACCEPT_LANGUAGE
|
|
{
|
|
BYTE acceptLanguage;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_ACCEPT_LANGUAGE;
|
|
|
|
typedef struct _SIP_HDR_CALL_ID
|
|
{
|
|
char value[SIP_MAX_CALL_ID_LEN];
|
|
char host[SIP_MAX_DOMAIN_NAME_LEN];
|
|
}SIP_HDR_CALL_ID;
|
|
|
|
typedef struct _SIP_HDR_CONTACT
|
|
{
|
|
char dispName[SIP_MAX_DISPLAY_NAME_LEN];
|
|
SIP_URI url;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_CONTACT;
|
|
|
|
typedef struct _SIP_HDR_CONTACTS
|
|
{
|
|
BYTE num;
|
|
BYTE head;
|
|
SIP_HDR_CONTACT contacts[SIP_MAX_NUM_OF_CONTACTS];
|
|
}SIP_HDR_CONTACTS;
|
|
|
|
typedef struct _SIP_HDR_CSEQ
|
|
{
|
|
DWORD value;
|
|
BYTE method;
|
|
}SIP_HDR_CSEQ;
|
|
|
|
typedef struct _SIP_HDR_DATE
|
|
{
|
|
BYTE wkDay;
|
|
BYTE mDay;
|
|
BYTE mon;
|
|
DWORD year;
|
|
BYTE hour;
|
|
BYTE min;
|
|
BYTE sec;
|
|
BYTE dateType;
|
|
|
|
}SIP_HDR_DATE;
|
|
|
|
typedef struct _SIP_HDR_MIME_VERSION
|
|
{
|
|
BYTE mimeVersion;
|
|
}SIP_HDR_MIME_VERSION;
|
|
|
|
typedef struct _SIP_HDR_ENCRYPTION
|
|
{
|
|
}SIP_HDR_ENCRYPTION;
|
|
|
|
typedef struct _SIP_HDR_EXPIRES
|
|
{
|
|
DWORD value;
|
|
}SIP_HDR_EXPIRES;
|
|
|
|
typedef struct _SIP_HDR_FROM
|
|
{
|
|
char dispName[SIP_MAX_DISPLAY_NAME_LEN];
|
|
SIP_URI url;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_FROM;
|
|
|
|
typedef struct _SIP_HDR_ORGANIZATION
|
|
{
|
|
}SIP_HDR_ORGANIZATION;
|
|
|
|
typedef struct _SIP_HDR_RECORD_ROUTE
|
|
{
|
|
char dispName[SIP_MAX_DISPLAY_NAME_LEN];
|
|
SIP_URI url;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_RECORD_ROUTE;
|
|
|
|
typedef struct _SIP_HDR_RECORD_ROUTES
|
|
{
|
|
BYTE num;
|
|
BYTE head;
|
|
SIP_HDR_RECORD_ROUTE recRoutes[SIP_MAX_NUM_OF_RECORD_ROUTES];
|
|
}SIP_HDR_RECORD_ROUTES;
|
|
|
|
typedef struct _SIP_HDR_TIMESTAMP
|
|
{
|
|
DWORD timeStamp;
|
|
}SIP_HDR_TIMESTAMP;
|
|
|
|
typedef struct _SIP_HDR_TO
|
|
{
|
|
char dispName[SIP_MAX_DISPLAY_NAME_LEN];
|
|
SIP_URI url;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_TO;
|
|
|
|
typedef struct _SIP_HDR_USER_AGENT
|
|
{
|
|
BYTE agent[SIP_MAX_LENGTH_OF_USER_AGENT];
|
|
}SIP_HDR_USER_AGENT;
|
|
|
|
typedef struct _SIP_HDR_VIA
|
|
{
|
|
BYTE version;
|
|
BYTE protocol;
|
|
// SIP_URI url;
|
|
SIP_VIA_URI url;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_VIA;
|
|
|
|
typedef struct _SIP_HDR_VIAS
|
|
{
|
|
BYTE num;
|
|
BYTE head;
|
|
SIP_HDR_VIA vias[SIP_MAX_NUM_OF_VIAS];
|
|
}SIP_HDR_VIAS;
|
|
|
|
// SIP request header struct
|
|
typedef struct _SIP_HDR_AUTHORIZATION
|
|
{
|
|
}SIP_HDR_AUTHORIZATION;
|
|
|
|
typedef struct _SIP_HDR_HIDE
|
|
{
|
|
}SIP_HDR_HIDE;
|
|
|
|
typedef struct _SIP_HDR_MAX_FORWARDS
|
|
{
|
|
WORD value;
|
|
}SIP_HDR_MAX_FORWARDS;
|
|
|
|
typedef struct _SIP_HDR_PRIORITY
|
|
{
|
|
}SIP_HDR_PRIORITY;
|
|
|
|
typedef struct _SIP_HDR_PROXY_AUTHORIZATION
|
|
{
|
|
}SIP_HDR_PROXY_AUTHORIZATION;
|
|
|
|
typedef struct _SIP_HDR_PROXY_REQUIRE
|
|
{
|
|
BYTE optionTag;
|
|
}SIP_HDR_PROXY_REQUIRE;
|
|
|
|
typedef struct _SIP_HDR_ROUTE
|
|
{
|
|
char dispName[SIP_MAX_DISPLAY_NAME_LEN];
|
|
SIP_URI url;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_ROUTE;
|
|
|
|
typedef struct _SIP_HDR_ROUTES
|
|
{
|
|
BYTE num;
|
|
BYTE head;
|
|
SIP_HDR_ROUTE routes[SIP_MAX_NUM_OF_ROUTES];
|
|
}SIP_HDR_ROUTES;
|
|
|
|
typedef struct _SIP_HDR_REFER_TO
|
|
{
|
|
char dispName[SIP_MAX_DISPLAY_NAME_LEN];
|
|
SIP_URI url;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_HDR_REFER_TO;
|
|
|
|
typedef struct _SIP_HDR_SUBSCRIPTION_STATE
|
|
{
|
|
char subscriptionState[SIP_MAX_LENGTH_OF_SUB_STATE];
|
|
}SIP_HDR_SUBSCRIPTION_STATE;
|
|
|
|
typedef struct _SIP_HDR_EVENT
|
|
{
|
|
char event[SIP_MAX_LENGTH_OF_EVENT];
|
|
}SIP_HDR_EVENT;
|
|
|
|
typedef struct _SIP_HDR_REQUIRE
|
|
{
|
|
BYTE optionTag;
|
|
}SIP_HDR_REQUIRE;
|
|
|
|
typedef struct _SIP_HDR_RESPONSE_KEY
|
|
{
|
|
}SIP_HDR_RESPONSE_KEY;
|
|
|
|
typedef struct _SIP_HDR_SUBJECT
|
|
{
|
|
BYTE subject[SIP_MAX_LENGTH_OF_SUBJECT];
|
|
}SIP_HDR_SUBJECT;
|
|
|
|
typedef struct _SIP_HDR_SUPPORTED
|
|
{
|
|
BYTE optionTag;
|
|
}SIP_HDR_SUPPORTED;
|
|
|
|
// SIP response header struct
|
|
typedef struct _SIP_HDR_ALLOW
|
|
{
|
|
BYTE num;
|
|
BYTE allowMethod[SIP_MAX_NUM_OF_ALLOW];
|
|
}SIP_HDR_ALLOW;
|
|
|
|
typedef struct _SIP_HDR_PROXY_AUTHENTICATE
|
|
{
|
|
}SIP_HDR_PROXY_AUTHENTICATE;
|
|
|
|
typedef struct _SIP_HDR_RETRY_AFTER
|
|
{
|
|
}SIP_HDR_RETRY_AFTER;
|
|
|
|
typedef struct _SIP_HDR_SERVER
|
|
{
|
|
BYTE server[64];
|
|
}SIP_HDR_SERVER;
|
|
|
|
typedef struct _SIP_HDR_UNSUPPORTED
|
|
{
|
|
BYTE optionTag;
|
|
}SIP_HDR_UNSUPPORTED;
|
|
|
|
typedef struct _SIP_HDR_WARNING
|
|
{
|
|
}SIP_HDR_WARNING;
|
|
|
|
typedef struct _SIP_HDR_WWW_AUTHENTICATE
|
|
{
|
|
}SIP_HDR_WWW_AUTHENTICATE;
|
|
|
|
// SIP message struct
|
|
typedef struct _SIP_START_LINE
|
|
{
|
|
BYTE sipVersion; // Public
|
|
|
|
BYTE sipMethod; // Request
|
|
SIP_URI requestUri;
|
|
|
|
int statusCode; // Response
|
|
char reasonPhrase[SIP_MAX_REASON_PHRASE_LEN];
|
|
}SIP_START_LINE;
|
|
|
|
typedef struct _SIP_CONTENT_TYPE
|
|
{
|
|
BYTE type;
|
|
BYTE subType;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_CONTENT_TYPE;
|
|
|
|
typedef struct _SIP_CONTENT_DISPOSITION
|
|
{
|
|
BYTE contentDisposition;
|
|
SIP_GEN_PARAMS params;
|
|
}SIP_CONTENT_DISPOSITION;
|
|
|
|
typedef struct _SIP_MESSAGE_BODY
|
|
{
|
|
DWORD sipBodyHdrFlg[SIP_MAX_HDR_FLAG_NUM];
|
|
SIP_CONTENT_TYPE sipBodyContentType;
|
|
SIP_CONTENT_DISPOSITION sipBodyContentDisposition;
|
|
BYTE msgBody[SIP_MAX_BODY_LEN];
|
|
}SIP_MESSAGE_BODY;
|
|
|
|
typedef struct _SIP_MESSAGE_BODYS
|
|
{
|
|
BYTE sipBodyNum;
|
|
SIP_MESSAGE_BODY sipBody[SIP_MAX_NUM_OF_SIP_SUB_BODY];
|
|
}SIP_MESSAGE_BODYS;
|
|
|
|
typedef struct _SIP_ENTITY
|
|
{
|
|
DWORD sipEntityHdrFlag[SIP_MAX_HDR_FLAG_NUM];
|
|
BYTE sipHdrContentEncoding;
|
|
SIP_CONTENT_DISPOSITION sipHdrContentDisposition;
|
|
WORD sipHdrContentLength;
|
|
SIP_CONTENT_TYPE sipHdrContentType;
|
|
BYTE sipHdrContentLanguage;
|
|
// BYTE sipBody[SIP_MAX_BODY_LEN];
|
|
SIP_MESSAGE_BODYS sipBodys;
|
|
}SIP_ENTITY;
|
|
|
|
typedef struct _SIP_REQUEST_HDR
|
|
{
|
|
SIP_HDR_AUTHORIZATION sipHdrAuthorization;
|
|
SIP_HDR_HIDE sipHdrHide;
|
|
SIP_HDR_MAX_FORWARDS sipHdrMaxForwards;
|
|
SIP_HDR_PRIORITY sipHdrPriority;
|
|
SIP_HDR_PROXY_AUTHORIZATION sipHdrProxyAuthorization;
|
|
SIP_HDR_PROXY_REQUIRE sipHdrProxyRequire;
|
|
SIP_HDR_ROUTES sipHdrRoutes;
|
|
SIP_HDR_REQUIRE sipHdrRequire;
|
|
SIP_HDR_RESPONSE_KEY sipHdrResKey;
|
|
SIP_HDR_SUBJECT sipHdrSubject;
|
|
SIP_HDR_REFER_TO sipHdrReferTo;
|
|
SIP_HDR_SUBSCRIPTION_STATE sipHdrSubscriptionState;
|
|
SIP_HDR_EVENT sipHdrEvent;
|
|
}SIP_REQUEST_HDR;
|
|
|
|
typedef struct _SIP_RESPONSE_HDR
|
|
{
|
|
SIP_HDR_PROXY_AUTHENTICATE sipHdrProxyAuthenticate;
|
|
SIP_HDR_RETRY_AFTER sipHdrRetryAfter;
|
|
SIP_HDR_SERVER sipHdrServer;
|
|
SIP_HDR_UNSUPPORTED sipHdrUnsupported;
|
|
SIP_HDR_WARNING sipHdrWarning;
|
|
SIP_HDR_WWW_AUTHENTICATE sipHdrWWWAuthenticate;
|
|
}SIP_RESPONSE_HDR;
|
|
|
|
typedef struct _SIP_MSG
|
|
{
|
|
SIP_START_LINE sipStartLine;
|
|
|
|
// General Headers
|
|
DWORD sipGenHdrFlag[SIP_MAX_HDR_FLAG_NUM];
|
|
SIP_HDR_ACCEPT sipHdrAccept;
|
|
SIP_HDR_ALLOW sipHdrAllow;
|
|
SIP_HDR_ACCEPT_ENCODING sipHdrAcceptEncoding;
|
|
SIP_HDR_ACCEPT_LANGUAGE sipHdrAcceptLanguage;
|
|
SIP_HDR_CALL_ID sipHdrCallId;
|
|
SIP_HDR_CONTACTS sipHdrContacts;
|
|
SIP_HDR_CSEQ sipHdrCseq;
|
|
SIP_HDR_DATE sipHdrDate;
|
|
SIP_HDR_MIME_VERSION sipHdrMimeVer;
|
|
SIP_HDR_ENCRYPTION sipHdrEncryption;
|
|
SIP_HDR_EXPIRES sipHdrExpires;
|
|
SIP_HDR_FROM sipHdrFrom;
|
|
SIP_HDR_ORGANIZATION sipHdrOrganization;
|
|
SIP_HDR_RECORD_ROUTES sipHdrRecordRoutes;
|
|
SIP_HDR_TIMESTAMP sipHdrStamp;
|
|
SIP_HDR_SUPPORTED sipHdrSupported;
|
|
SIP_HDR_TO sipHdrTo;
|
|
SIP_HDR_VIAS sipHdrVias;
|
|
SIP_HDR_USER_AGENT sipHdrUserAgent;
|
|
|
|
struct
|
|
{
|
|
DWORD sipReHdrFlag[SIP_MAX_HDR_FLAG_NUM];
|
|
union
|
|
{
|
|
SIP_REQUEST_HDR sipReqHdr;
|
|
SIP_RESPONSE_HDR sipRspHdr;
|
|
}sipReHdr;
|
|
}sipReStruct;
|
|
|
|
SIP_ENTITY sipEntity;
|
|
}SIP_MSG;
|
|
|
|
typedef struct _SIP_MANAGE
|
|
{
|
|
BYTE cmd;
|
|
}SIP_MANAGE;
|
|
|
|
typedef struct _SIP_TRANSPORT_ADDR
|
|
{
|
|
BYTE type;
|
|
WORD port;
|
|
union
|
|
{
|
|
DWORD ipV4;
|
|
DWORD ipV6[4];
|
|
}addr;
|
|
}SIP_TRANSPORT_ADDR;
|
|
|
|
typedef struct _SIP_API_STRUCT
|
|
{
|
|
BYTE sipApiType; // SIP_API_REQ_MSG/SIP_API_RES_MSG/SIP_API_MANAGE_MSG
|
|
SIP_TRANSPORT_ADDR sipTransAddr; // Transport address of the SIP message
|
|
union
|
|
{
|
|
SIP_MSG sipMsg; // Including request and response
|
|
SIP_MANAGE sipManage;
|
|
}sipApiMsg;
|
|
}SIP_API_STRUCT;
|
|
|
|
typedef struct _SIP_CR_MSG
|
|
{
|
|
SIP_TRANSPORT_ADDR sipTransAddr;
|
|
SIP_START_LINE sipCrStartLine;
|
|
SIP_HDR_VIA sipCrHdrVia;
|
|
SIP_HDR_CSEQ sipCrHdrCseq;
|
|
SIP_HDR_TO sipCrHdrTo;
|
|
SIP_HDR_FROM sipCrHdrFrom;
|
|
SIP_HDR_CALL_ID sipCrHdrCallId;
|
|
}SIP_CR_MSG;
|
|
|
|
// SIP USER struct
|
|
/* The upper layer register recv_proc call-back function to receive sip messages
|
|
upPort: destination UP port the message will be sent to, if unknown, it should be set to 0xFFFF.
|
|
sipPort: source SIP port the UP message is sent from, if no sip_port is maintained, it's set to 0xFFFF
|
|
transFlag: indicates whether this message sent from SIP transport layer directly or sent from SIP transaction layer.
|
|
sipApiMsg: a pointer to the message pointer that is pointing to the message struct of the upper layer, so the received message can be accessed at that address
|
|
returns 0 if succeeds, otherwise returns -1
|
|
*/
|
|
typedef struct _SIP_USER
|
|
{
|
|
BYTE proxyType;
|
|
char userName[16];
|
|
char domain[SIP_MAX_DOMAIN_NAME_LEN];
|
|
int (*recv_proc)(WORD sipPort, WORD upPort, BYTE transFlag, SIP_API_STRUCT *sipApiMsg);
|
|
}SIP_USER;
|
|
|
|
/*typedef struct _SIP_SIP_UA_USER
|
|
{
|
|
char domain[SIP_MAX_DOMAIN_NAME_LEN];
|
|
}SIP_SIP_UA_USER;*/
|
|
|
|
// Should be called in the main program when system starts up,
|
|
// Returns 0 if succeeds, otherwise returns -1
|
|
int sip_init();
|
|
|
|
// Should be called every 10 ms in the platform section of the main program
|
|
void sip_timer();
|
|
void sip_t10ms();
|
|
|
|
/* The upper layer uses this function to send sip message to the peer
|
|
sipTransId: destination SIP port the UP message will be sent to, if unknown, it should be set to 0xFFFF
|
|
upPort: source UP port the message is sent from
|
|
transFlag: indicates whether this message will be sent within SIP transaction layer (stateful proxy or user agent),
|
|
or directly goes to the SIP transport layer (stateless proxy)
|
|
sipApiMsg: a pointer pointing to the actual struct of the message to be sent to the SIP module
|
|
if succeeds, returns sip_port, otherwise return a negative value
|
|
if succeeds, and no sip_port is maintained for this message, returns 0xFFFF
|
|
*/
|
|
int sip_send_msg(WORD sipTransId, WORD upPort, BYTE transFlag, SIP_API_STRUCT *sipApiMsg);
|
|
|
|
/* The upper layer register its domain name and message receive callback function to the SIP module
|
|
if succeeds, returns 0, otherwise returns -1
|
|
*/
|
|
int sip_register_user(SIP_USER *sipUser);
|
|
|
|
/* The upper layer use this function to create trascation
|
|
client: clent/server
|
|
method: invite/non-invite
|
|
*/
|
|
int sip_create_transaction(BYTE client, BYTE method, BYTE userIndex, WORD upPort, SIP_API_STRUCT *msg);
|
|
|
|
int sip_create_trans_branch(WORD transId, SIP_GEN_PARA *branch);
|
|
|
|
#endif
|