summaryrefslogtreecommitdiffstats
path: root/tinySIP
diff options
context:
space:
mode:
authorMamadou DIOP <bossiel@yahoo.fr>2015-08-17 01:56:35 +0200
committerMamadou DIOP <bossiel@yahoo.fr>2015-08-17 01:56:35 +0200
commit631fffee8a28b1bec5ed1f1d26a20e0135967f99 (patch)
tree74afe3bf3efe15aa82bcd0272b2b0f4d48c2d837 /tinySIP
parent7908865936604036e6f200f1b5e069f8752f3a3a (diff)
downloaddoubango-631fffee8a28b1bec5ed1f1d26a20e0135967f99.zip
doubango-631fffee8a28b1bec5ed1f1d26a20e0135967f99.tar.gz
-
Diffstat (limited to 'tinySIP')
-rw-r--r--tinySIP/Doxyfile1558
-rw-r--r--tinySIP/Makefile.am209
-rw-r--r--tinySIP/abnf/core.abnf1053
-rw-r--r--tinySIP/droid-makefile190
-rw-r--r--tinySIP/footer.html7
-rw-r--r--tinySIP/header.html38
-rw-r--r--tinySIP/include/tinysip.h68
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_common.h52
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_info.h65
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_invite.h131
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_message.h69
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_options.h71
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_publish.h74
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_register.h76
-rw-r--r--tinySIP/include/tinysip/api/tsip_api_subscribe.h77
-rw-r--r--tinySIP/include/tinysip/authentication/tsip_challenge.h92
-rw-r--r--tinySIP/include/tinysip/authentication/tsip_milenage.h189
-rw-r--r--tinySIP/include/tinysip/authentication/tsip_rijndael.h71
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog.h208
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_info.h57
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_invite.common.h122
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_invite.h128
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_layer.h88
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_message.h57
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_options.h54
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_publish.h60
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_register.common.h75
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_register.h62
-rw-r--r--tinySIP/include/tinysip/dialogs/tsip_dialog_subscribe.h57
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header.h196
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Accept_Contact.h56
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Accept_Encoding.h56
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Accept_Language.h56
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Accept_Resource_Priority.h56
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Alert_Info.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Allow.h66
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Allow_Events.h63
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Authentication_Info.h56
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Authorization.h96
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_CSeq.h71
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Call_ID.h68
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Call_Info.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Contact.h90
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Content_Disposition.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Content_Encoding.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Content_Language.h49
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Content_Length.h66
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Content_Type.h79
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Date.h79
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Dummy.h66
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Error_Info.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Event.h72
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Expires.h67
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_From.h69
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_History_Info.h56
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Identity.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Identity_Info.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_In_Reply_To.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Join.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_MIME_Version.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Max_Forwards.h68
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Min_Expires.h68
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Min_SE.h67
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Organization.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Access_Network_Info.h71
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Answer_State.h53
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Asserted_Identity.h70
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Associated_URI.h72
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Called_Party_ID.h53
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Charging_Function_Addresses.h68
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Charging_Vector.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_DCS_Billing_Info.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_DCS_LAES.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_DCS_OSPS.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_DCS_Redirect.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_DCS_Trace_Party_ID.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Early_Media.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Media_Authorization.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Preferred_Identity.h69
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Profile_Key.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_User_Database.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_P_Visited_Network_ID.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Path.h72
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Priority.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Privacy.h65
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Proxy_Authenticate.h77
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Proxy_Authorization.h96
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Proxy_Require.h66
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_RAck.h68
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_RSeq.h68
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Reason.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Record_Route.h73
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Refer_Sub.h67
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Refer_To.h69
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Referred_By.h70
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Reject_Contact.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Replaces.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Reply_To.h53
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Request_Disposition.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Require.h66
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Resource_Priority.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Retry_After.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Route.h72
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_SIP_ETag.h66
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_SIP_If_Match.h67
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Security_Client.h111
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Security_Server.h111
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Security_Verify.h110
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Server.h69
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Service_Route.h71
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Session_Expires.h69
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Subject.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Subscription_State.h71
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Supported.h67
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Target_Dialog.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Timestamp.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_To.h70
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Unsupported.h54
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_User_Agent.h65
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Via.h107
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_WWW_Authenticate.h79
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_Warning.h72
-rw-r--r--tinySIP/include/tinysip/headers/tsip_header_accept.h57
-rw-r--r--tinySIP/include/tinysip/headers/tsip_headers.h89
-rw-r--r--tinySIP/include/tinysip/parsers/tsip_parser_header.h44
-rw-r--r--tinySIP/include/tinysip/parsers/tsip_parser_message.h44
-rw-r--r--tinySIP/include/tinysip/parsers/tsip_parser_uri.h45
-rw-r--r--tinySIP/include/tinysip/sigcomp/tsip_sigcomp.h69
-rw-r--r--tinySIP/include/tinysip/transactions/tsip_transac.h181
-rw-r--r--tinySIP/include/tinysip/transactions/tsip_transac_ict.h63
-rw-r--r--tinySIP/include/tinysip/transactions/tsip_transac_ist.h64
-rw-r--r--tinySIP/include/tinysip/transactions/tsip_transac_layer.h72
-rw-r--r--tinySIP/include/tinysip/transactions/tsip_transac_nict.h61
-rw-r--r--tinySIP/include/tinysip/transactions/tsip_transac_nist.h59
-rw-r--r--tinySIP/include/tinysip/transports/tsip_transport.h187
-rw-r--r--tinySIP/include/tinysip/transports/tsip_transport_ipsec.h86
-rw-r--r--tinySIP/include/tinysip/transports/tsip_transport_layer.h77
-rw-r--r--tinySIP/include/tinysip/transports/tsip_transport_tls.h41
-rw-r--r--tinySIP/include/tinysip/tsip_action.h171
-rw-r--r--tinySIP/include/tinysip/tsip_event.h113
-rw-r--r--tinySIP/include/tinysip/tsip_message.h216
-rw-r--r--tinySIP/include/tinysip/tsip_message_common.h140
-rw-r--r--tinySIP/include/tinysip/tsip_ssession.h301
-rw-r--r--tinySIP/include/tinysip/tsip_timers.h123
-rw-r--r--tinySIP/include/tinysip/tsip_uri.h95
-rw-r--r--tinySIP/include/tinysip_config.h96
-rw-r--r--tinySIP/include/tsip.h692
-rw-r--r--tinySIP/ragel.sh162
-rw-r--r--tinySIP/ragel/tsip_machine_header.rl133
-rw-r--r--tinySIP/ragel/tsip_machine_message.rl57
-rw-r--r--tinySIP/ragel/tsip_machine_utils.rl197
-rw-r--r--tinySIP/ragel/tsip_parser_header.rl863
-rw-r--r--tinySIP/ragel/tsip_parser_header_Accept_Contact.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Accept_Encoding.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Accept_Language.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Accept_Resource_Priority.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Alert_Info.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Allow.rl190
-rw-r--r--tinySIP/ragel/tsip_parser_header_Allow_Events.rl170
-rw-r--r--tinySIP/ragel/tsip_parser_header_Authentication_Info.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Authorization.rl285
-rw-r--r--tinySIP/ragel/tsip_parser_header_CSeq.rl168
-rw-r--r--tinySIP/ragel/tsip_parser_header_Call_ID.rl163
-rw-r--r--tinySIP/ragel/tsip_parser_header_Call_Info.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Contact.rl256
-rw-r--r--tinySIP/ragel/tsip_parser_header_Content_Disposition.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Content_Encoding.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Content_Language.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Content_Length.rl157
-rw-r--r--tinySIP/ragel/tsip_parser_header_Content_Type.rl181
-rw-r--r--tinySIP/ragel/tsip_parser_header_Date.rl221
-rw-r--r--tinySIP/ragel/tsip_parser_header_Dummy.rl170
-rw-r--r--tinySIP/ragel/tsip_parser_header_Error_Info.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Event.rl168
-rw-r--r--tinySIP/ragel/tsip_parser_header_Expires.rl155
-rw-r--r--tinySIP/ragel/tsip_parser_header_From.rl196
-rw-r--r--tinySIP/ragel/tsip_parser_header_History_Info.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Identity.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Identity_Info.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_In_Reply_To.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Join.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_MIME_Version.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Max_Forwards.rl155
-rw-r--r--tinySIP/ragel/tsip_parser_header_Min_Expires.rl160
-rw-r--r--tinySIP/ragel/tsip_parser_header_Min_SE.rl160
-rw-r--r--tinySIP/ragel/tsip_parser_header_Organization.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Access_Network_Info.rl170
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Answer_State.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Asserted_Identity.rl200
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Associated_URI.rl212
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Called_Party_ID.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Charging_Function_Addresses.rl195
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Charging_Vector.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_DCS_Billing_Info.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_DCS_LAES.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_DCS_OSPS.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_DCS_Redirect.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_DCS_Trace_Party_ID.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Early_Media.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Media_Authorization.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Preferred_Identity.rl198
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Profile_Key.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_User_Database.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_P_Visited_Network_ID.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Path.rl214
-rw-r--r--tinySIP/ragel/tsip_parser_header_Priority.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Privacy.rl176
-rw-r--r--tinySIP/ragel/tsip_parser_header_Proxy_Authenticate.rl245
-rw-r--r--tinySIP/ragel/tsip_parser_header_Proxy_Authorization.rl286
-rw-r--r--tinySIP/ragel/tsip_parser_header_Proxy_Require.rl181
-rw-r--r--tinySIP/ragel/tsip_parser_header_RAck.rl170
-rw-r--r--tinySIP/ragel/tsip_parser_header_RSeq.rl158
-rw-r--r--tinySIP/ragel/tsip_parser_header_Reason.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Record_Route.rl211
-rw-r--r--tinySIP/ragel/tsip_parser_header_Refer_Sub.rl165
-rw-r--r--tinySIP/ragel/tsip_parser_header_Refer_To.rl195
-rw-r--r--tinySIP/ragel/tsip_parser_header_Referred_By.rl207
-rw-r--r--tinySIP/ragel/tsip_parser_header_Reject_Contact.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Replaces.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Reply_To.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Request_Disposition.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Require.rl180
-rw-r--r--tinySIP/ragel/tsip_parser_header_Resource_Priority.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Retry_After.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Route.rl218
-rw-r--r--tinySIP/ragel/tsip_parser_header_SIP_ETag.rl163
-rw-r--r--tinySIP/ragel/tsip_parser_header_SIP_If_Match.rl165
-rw-r--r--tinySIP/ragel/tsip_parser_header_Security_Client.rl297
-rw-r--r--tinySIP/ragel/tsip_parser_header_Security_Server.rl280
-rw-r--r--tinySIP/ragel/tsip_parser_header_Security_Verify.rl279
-rw-r--r--tinySIP/ragel/tsip_parser_header_Server.rl167
-rw-r--r--tinySIP/ragel/tsip_parser_header_Service_Route.rl213
-rw-r--r--tinySIP/ragel/tsip_parser_header_Session_Expires.rl172
-rw-r--r--tinySIP/ragel/tsip_parser_header_Subject.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Subscription_State.rl189
-rw-r--r--tinySIP/ragel/tsip_parser_header_Supported.rl180
-rw-r--r--tinySIP/ragel/tsip_parser_header_Target_Dialog.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_Timestamp.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_To.rl200
-rw-r--r--tinySIP/ragel/tsip_parser_header_Unsupported.rl1
-rw-r--r--tinySIP/ragel/tsip_parser_header_User_Agent.rl160
-rw-r--r--tinySIP/ragel/tsip_parser_header_Via.rl345
-rw-r--r--tinySIP/ragel/tsip_parser_header_WWW_Authenticate.rl244
-rw-r--r--tinySIP/ragel/tsip_parser_header_Warning.rl190
-rw-r--r--tinySIP/ragel/tsip_parser_message.rl275
-rw-r--r--tinySIP/ragel/tsip_parser_uri.rl180
-rw-r--r--tinySIP/src/api/tsip_api_common.c134
-rw-r--r--tinySIP/src/api/tsip_api_info.c134
-rw-r--r--tinySIP/src/api/tsip_api_invite.c363
-rw-r--r--tinySIP/src/api/tsip_api_message.c134
-rw-r--r--tinySIP/src/api/tsip_api_options.c133
-rw-r--r--tinySIP/src/api/tsip_api_publish.c159
-rw-r--r--tinySIP/src/api/tsip_api_register.c166
-rw-r--r--tinySIP/src/api/tsip_api_subscribe.c160
-rw-r--r--tinySIP/src/authentication/tsip_challenge.c477
-rw-r--r--tinySIP/src/authentication/tsip_milenage.c350
-rw-r--r--tinySIP/src/authentication/tsip_rijndael.c480
-rw-r--r--tinySIP/src/dialogs/tsip_dialog.c1354
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_info.c556
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.c1942
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.cdiv.c0
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.client.c333
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.conf.c1
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.ect.c487
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.hold.c252
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.ice.c617
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.qos.c92
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.server.c790
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_invite.timers.c302
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_layer.c776
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_message.c552
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_options.c578
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_publish.client.c701
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_register.c507
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_register.client.c424
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_register.server.c237
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_subscribe.client.c764
-rw-r--r--tinySIP/src/dialogs/tsip_dialog_subscribe.server.c1
-rw-r--r--tinySIP/src/headers/tsip_header.c337
-rw-r--r--tinySIP/src/headers/tsip_header_Accept_Contact.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Accept_Encoding.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Accept_Language.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Accept_Resource_Priority.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Alert_Info.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Allow.c365
-rw-r--r--tinySIP/src/headers/tsip_header_Allow_Events.c352
-rw-r--r--tinySIP/src/headers/tsip_header_Authentication_Info.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Authorization.c180
-rw-r--r--tinySIP/src/headers/tsip_header_CSeq.c344
-rw-r--r--tinySIP/src/headers/tsip_header_Call_ID.c340
-rw-r--r--tinySIP/src/headers/tsip_header_Call_Info.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Contact.c702
-rw-r--r--tinySIP/src/headers/tsip_header_Content_Disposition.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Content_Encoding.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Content_Language.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Content_Length.c325
-rw-r--r--tinySIP/src/headers/tsip_header_Content_Type.c425
-rw-r--r--tinySIP/src/headers/tsip_header_Date.c466
-rw-r--r--tinySIP/src/headers/tsip_header_Dummy.c331
-rw-r--r--tinySIP/src/headers/tsip_header_Error_Info.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Event.c462
-rw-r--r--tinySIP/src/headers/tsip_header_Expires.c312
-rw-r--r--tinySIP/src/headers/tsip_header_From.c581
-rw-r--r--tinySIP/src/headers/tsip_header_History_Info.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Identity.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Identity_Info.c1
-rw-r--r--tinySIP/src/headers/tsip_header_In_Reply_To.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Join.c1
-rw-r--r--tinySIP/src/headers/tsip_header_MIME_Version.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Max_Forwards.c321
-rw-r--r--tinySIP/src/headers/tsip_header_Min_Expires.c326
-rw-r--r--tinySIP/src/headers/tsip_header_Min_SE.c449
-rw-r--r--tinySIP/src/headers/tsip_header_Organization.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_Access_Network_Info.c345
-rw-r--r--tinySIP/src/headers/tsip_header_P_Answer_State.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_Asserted_Identity.c1429
-rw-r--r--tinySIP/src/headers/tsip_header_P_Associated_URI.c558
-rw-r--r--tinySIP/src/headers/tsip_header_P_Called_Party_ID.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_Charging_Function_Addresses.c749
-rw-r--r--tinySIP/src/headers/tsip_header_P_Charging_Vector.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_DCS_Billing_Info.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_DCS_LAES.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_DCS_OSPS.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_DCS_Redirect.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_DCS_Trace_Party_ID.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_Early_Media.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_Media_Authorization.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_Preferred_Identity.c669
-rw-r--r--tinySIP/src/headers/tsip_header_P_Profile_Key.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_User_Database.c1
-rw-r--r--tinySIP/src/headers/tsip_header_P_Visited_Network_ID.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Path.c543
-rw-r--r--tinySIP/src/headers/tsip_header_Priority.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Privacy.c489
-rw-r--r--tinySIP/src/headers/tsip_header_Proxy_Authenticate.c161
-rw-r--r--tinySIP/src/headers/tsip_header_Proxy_Authorization.c182
-rw-r--r--tinySIP/src/headers/tsip_header_Proxy_Require.c364
-rw-r--r--tinySIP/src/headers/tsip_header_RAck.c355
-rw-r--r--tinySIP/src/headers/tsip_header_RSeq.c313
-rw-r--r--tinySIP/src/headers/tsip_header_Reason.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Record_Route.c554
-rw-r--r--tinySIP/src/headers/tsip_header_Refer_Sub.c471
-rw-r--r--tinySIP/src/headers/tsip_header_Refer_To.c837
-rw-r--r--tinySIP/src/headers/tsip_header_Referred_By.c1372
-rw-r--r--tinySIP/src/headers/tsip_header_Reject_Contact.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Replaces.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Reply_To.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Request_Disposition.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Require.c354
-rw-r--r--tinySIP/src/headers/tsip_header_Resource_Priority.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Retry_After.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Route.c545
-rw-r--r--tinySIP/src/headers/tsip_header_SIP_ETag.c333
-rw-r--r--tinySIP/src/headers/tsip_header_SIP_If_Match.c338
-rw-r--r--tinySIP/src/headers/tsip_header_Security_Client.c969
-rw-r--r--tinySIP/src/headers/tsip_header_Security_Server.c949
-rw-r--r--tinySIP/src/headers/tsip_header_Security_Verify.c948
-rw-r--r--tinySIP/src/headers/tsip_header_Server.c316
-rw-r--r--tinySIP/src/headers/tsip_header_Service_Route.c552
-rw-r--r--tinySIP/src/headers/tsip_header_Session_Expires.c563
-rw-r--r--tinySIP/src/headers/tsip_header_Subject.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Subscription_State.c700
-rw-r--r--tinySIP/src/headers/tsip_header_Supported.c361
-rw-r--r--tinySIP/src/headers/tsip_header_Target_Dialog.c1
-rw-r--r--tinySIP/src/headers/tsip_header_Timestamp.c1
-rw-r--r--tinySIP/src/headers/tsip_header_To.c953
-rw-r--r--tinySIP/src/headers/tsip_header_Unsupported.c1
-rw-r--r--tinySIP/src/headers/tsip_header_User_Agent.c319
-rw-r--r--tinySIP/src/headers/tsip_header_Via.c1417
-rw-r--r--tinySIP/src/headers/tsip_header_WWW_Authenticate.c160
-rw-r--r--tinySIP/src/headers/tsip_header_Warning.c554
-rw-r--r--tinySIP/src/headers/tsip_header_accept.c30
-rw-r--r--tinySIP/src/parsers/tsip_parser_header.c6357
-rw-r--r--tinySIP/src/parsers/tsip_parser_message.c533
-rw-r--r--tinySIP/src/parsers/tsip_parser_uri.c685
-rw-r--r--tinySIP/src/sigcomp/tsip_sigcomp.c530
-rw-r--r--tinySIP/src/transactions/tsip_transac.c274
-rw-r--r--tinySIP/src/transactions/tsip_transac_ict.c927
-rw-r--r--tinySIP/src/transactions/tsip_transac_ist.c823
-rw-r--r--tinySIP/src/transactions/tsip_transac_layer.c352
-rw-r--r--tinySIP/src/transactions/tsip_transac_nict.c731
-rw-r--r--tinySIP/src/transactions/tsip_transac_nist.c583
-rw-r--r--tinySIP/src/transports/tsip_transport.c1098
-rw-r--r--tinySIP/src/transports/tsip_transport_ipsec.c537
-rw-r--r--tinySIP/src/transports/tsip_transport_layer.c1403
-rw-r--r--tinySIP/src/transports/tsip_transport_tls.c0
-rw-r--r--tinySIP/src/tsip.c1235
-rw-r--r--tinySIP/src/tsip_action.c283
-rw-r--r--tinySIP/src/tsip_event.c163
-rw-r--r--tinySIP/src/tsip_message.c654
-rw-r--r--tinySIP/src/tsip_ssession.c791
-rw-r--r--tinySIP/src/tsip_timers.c250
-rw-r--r--tinySIP/src/tsip_uri.c345
-rw-r--r--tinySIP/test/droid-makefile28
-rw-r--r--tinySIP/test/stdafx.c26
-rw-r--r--tinySIP/test/stdafx.h41
-rw-r--r--tinySIP/test/targetver.h14
-rw-r--r--tinySIP/test/test.c85
-rw-r--r--tinySIP/test/test.vcproj404
-rw-r--r--tinySIP/test/test_imsaka.h93
-rw-r--r--tinySIP/test/test_ip6_torture.h1
-rw-r--r--tinySIP/test/test_sipmessages.h265
-rw-r--r--tinySIP/test/test_stack.h521
-rw-r--r--tinySIP/test/test_transac.h34
-rw-r--r--tinySIP/test/test_uri.h177
-rw-r--r--tinySIP/tinySIP.pc.in16
-rw-r--r--tinySIP/tinySIP.sln139
-rw-r--r--tinySIP/tinySIP.vcproj1819
-rw-r--r--tinySIP/version.rc102
-rw-r--r--tinySIP/winrt/tinySIP.sln126
-rw-r--r--tinySIP/winrt/tinySIP.vcxproj450
-rw-r--r--tinySIP/winrt/tinySIP.vcxproj.filters934
412 files changed, 90293 insertions, 0 deletions
diff --git a/tinySIP/Doxyfile b/tinySIP/Doxyfile
new file mode 100644
index 0000000..62532db
--- /dev/null
+++ b/tinySIP/Doxyfile
@@ -0,0 +1,1558 @@
+# Doxyfile 1.6.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = tinySIP
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = 1.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH = /Users/dimitri/doxygen/mail/1.5.7/doxywizard/
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set
+# FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 62
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page. This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = src \
+ include
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.idl \
+ *.odl \
+ *.cs \
+ *.php \
+ *.php3 \
+ *.inc \
+ *.m \
+ *.mm \
+ *.dox \
+ *.py \
+ *.f90 \
+ *.f \
+ *.vhd \
+ *.vhdl \
+ *.asm
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# When the SEARCHENGINE tag is enable doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP)
+# there is already a search function so this one should typically
+# be disabled.
+
+SEARCHENGINE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES = ../tinySAK/tinySAK.tag
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = NO
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = YES
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/tinySIP/Makefile.am b/tinySIP/Makefile.am
new file mode 100644
index 0000000..f3c3ae2
--- /dev/null
+++ b/tinySIP/Makefile.am
@@ -0,0 +1,209 @@
+lib_LTLIBRARIES = libtinySIP.la
+libtinySIP_la_LIBADD = \
+ ../tinySAK/libtinySAK.la\
+ ../tinyNET/libtinyNET.la\
+ ../tinyHTTP/libtinyHTTP.la\
+ ../tinyIPSec/libtinyIPSec.la\
+ ../tinySDP/libtinySDP.la\
+ ../tinyMEDIA/libtinyMEDIA.la\
+ ../tinySIGCOMP/libtinySIGCOMP.la
+
+libtinySIP_la_CPPFLAGS = \
+ -I../tinySAK/src\
+ -I../tinyNET/src\
+ -I../tinyHTTP/include\
+ -I../tinyIPSec/src\
+ -I../tinySIGCOMP/src\
+ -I../tinySDP/include\
+ -I../tinyMEDIA/include\
+ -Iinclude
+
+libtinySIP_la_SOURCES = \
+ src/tsip.c\
+ src/tsip_action.c\
+ src/tsip_event.c\
+ src/tsip_message.c\
+ src/tsip_ssession.c\
+ src/tsip_timers.c\
+ src/tsip_uri.c
+
+libtinySIP_la_SOURCES += src/api/tsip_api_common.c\
+ src/api/tsip_api_info.c\
+ src/api/tsip_api_invite.c\
+ src/api/tsip_api_message.c\
+ src/api/tsip_api_options.c\
+ src/api/tsip_api_publish.c\
+ src/api/tsip_api_register.c\
+ src/api/tsip_api_subscribe.c
+
+libtinySIP_la_SOURCES += src/authentication/tsip_challenge.c\
+ src/authentication/tsip_milenage.c\
+ src/authentication/tsip_rijndael.c
+
+libtinySIP_la_SOURCES += src/dialogs/tsip_dialog.c\
+ src/dialogs/tsip_dialog_info.c\
+ src/dialogs/tsip_dialog_invite.c\
+ src/dialogs/tsip_dialog_invite.cdiv.c\
+ src/dialogs/tsip_dialog_invite.client.c\
+ src/dialogs/tsip_dialog_invite.conf.c\
+ src/dialogs/tsip_dialog_invite.ect.c\
+ src/dialogs/tsip_dialog_invite.hold.c\
+ src/dialogs/tsip_dialog_invite.ice.c\
+ src/dialogs/tsip_dialog_invite.qos.c\
+ src/dialogs/tsip_dialog_invite.server.c\
+ src/dialogs/tsip_dialog_invite.timers.c\
+ src/dialogs/tsip_dialog_layer.c\
+ src/dialogs/tsip_dialog_message.c\
+ src/dialogs/tsip_dialog_options.c\
+ src/dialogs/tsip_dialog_publish.client.c\
+ src/dialogs/tsip_dialog_register.c\
+ src/dialogs/tsip_dialog_register.client.c\
+ src/dialogs/tsip_dialog_register.server.c\
+ src/dialogs/tsip_dialog_subscribe.client.c\
+ src/dialogs/tsip_dialog_subscribe.server.c
+
+libtinySIP_la_SOURCES += src/headers/tsip_header.c\
+ src/headers/tsip_header_accept.c\
+ src/headers/tsip_header_Accept_Contact.c\
+ src/headers/tsip_header_Accept_Encoding.c\
+ src/headers/tsip_header_Accept_Language.c\
+ src/headers/tsip_header_Accept_Resource_Priority.c\
+ src/headers/tsip_header_Alert_Info.c\
+ src/headers/tsip_header_Allow.c\
+ src/headers/tsip_header_Allow_Events.c\
+ src/headers/tsip_header_Authentication_Info.c\
+ src/headers/tsip_header_Authorization.c\
+ src/headers/tsip_header_Call_ID.c\
+ src/headers/tsip_header_Call_Info.c\
+ src/headers/tsip_header_Contact.c\
+ src/headers/tsip_header_Content_Disposition.c\
+ src/headers/tsip_header_Content_Encoding.c\
+ src/headers/tsip_header_Content_Language.c\
+ src/headers/tsip_header_Content_Length.c\
+ src/headers/tsip_header_Content_Type.c\
+ src/headers/tsip_header_CSeq.c\
+ src/headers/tsip_header_Date.c\
+ src/headers/tsip_header_Dummy.c\
+ src/headers/tsip_header_Error_Info.c\
+ src/headers/tsip_header_Event.c\
+ src/headers/tsip_header_Expires.c\
+ src/headers/tsip_header_From.c\
+ src/headers/tsip_header_History_Info.c\
+ src/headers/tsip_header_Identity.c\
+ src/headers/tsip_header_Identity_Info.c\
+ src/headers/tsip_header_In_Reply_To.c\
+ src/headers/tsip_header_Join.c\
+ src/headers/tsip_header_Max_Forwards.c\
+ src/headers/tsip_header_MIME_Version.c\
+ src/headers/tsip_header_Min_Expires.c\
+ src/headers/tsip_header_Min_SE.c\
+ src/headers/tsip_header_Organization.c\
+ src/headers/tsip_header_Path.c\
+ src/headers/tsip_header_Priority.c\
+ src/headers/tsip_header_Privacy.c\
+ src/headers/tsip_header_Proxy_Authenticate.c\
+ src/headers/tsip_header_Proxy_Authorization.c\
+ src/headers/tsip_header_Proxy_Require.c\
+ src/headers/tsip_header_P_Access_Network_Info.c\
+ src/headers/tsip_header_P_Answer_State.c\
+ src/headers/tsip_header_P_Asserted_Identity.c\
+ src/headers/tsip_header_P_Associated_URI.c\
+ src/headers/tsip_header_P_Called_Party_ID.c\
+ src/headers/tsip_header_P_Charging_Function_Addresses.c\
+ src/headers/tsip_header_P_Charging_Vector.c\
+ src/headers/tsip_header_P_DCS_Billing_Info.c\
+ src/headers/tsip_header_P_DCS_LAES.c\
+ src/headers/tsip_header_P_DCS_OSPS.c\
+ src/headers/tsip_header_P_DCS_Redirect.c\
+ src/headers/tsip_header_P_DCS_Trace_Party_ID.c\
+ src/headers/tsip_header_P_Early_Media.c\
+ src/headers/tsip_header_P_Media_Authorization.c\
+ src/headers/tsip_header_P_Preferred_Identity.c\
+ src/headers/tsip_header_P_Profile_Key.c\
+ src/headers/tsip_header_P_User_Database.c\
+ src/headers/tsip_header_P_Visited_Network_ID.c\
+ src/headers/tsip_header_RAck.c\
+ src/headers/tsip_header_Reason.c\
+ src/headers/tsip_header_Record_Route.c\
+ src/headers/tsip_header_Referred_By.c\
+ src/headers/tsip_header_Refer_Sub.c\
+ src/headers/tsip_header_Refer_To.c\
+ src/headers/tsip_header_Reject_Contact.c\
+ src/headers/tsip_header_Replaces.c\
+ src/headers/tsip_header_Reply_To.c\
+ src/headers/tsip_header_Request_Disposition.c\
+ src/headers/tsip_header_Require.c\
+ src/headers/tsip_header_Resource_Priority.c\
+ src/headers/tsip_header_Retry_After.c\
+ src/headers/tsip_header_Route.c\
+ src/headers/tsip_header_RSeq.c\
+ src/headers/tsip_header_Security_Client.c\
+ src/headers/tsip_header_Security_Server.c\
+ src/headers/tsip_header_Security_Verify.c\
+ src/headers/tsip_header_Server.c\
+ src/headers/tsip_header_Service_Route.c\
+ src/headers/tsip_header_Session_Expires.c\
+ src/headers/tsip_header_SIP_ETag.c\
+ src/headers/tsip_header_SIP_If_Match.c\
+ src/headers/tsip_header_Subject.c\
+ src/headers/tsip_header_Subscription_State.c\
+ src/headers/tsip_header_Supported.c\
+ src/headers/tsip_header_Target_Dialog.c\
+ src/headers/tsip_header_Timestamp.c\
+ src/headers/tsip_header_To.c\
+ src/headers/tsip_header_Unsupported.c\
+ src/headers/tsip_header_User_Agent.c\
+ src/headers/tsip_header_Via.c\
+ src/headers/tsip_header_Warning.c\
+ src/headers/tsip_header_WWW_Authenticate.c
+
+libtinySIP_la_SOURCES += src/parsers/tsip_parser_header.c\
+ src/parsers/tsip_parser_message.c\
+ src/parsers/tsip_parser_uri.c
+
+libtinySIP_la_SOURCES += src/sigcomp/tsip_sigcomp.c
+
+libtinySIP_la_SOURCES += src/transactions/tsip_transac.c\
+ src/transactions/tsip_transac_ict.c\
+ src/transactions/tsip_transac_ist.c\
+ src/transactions/tsip_transac_layer.c\
+ src/transactions/tsip_transac_nict.c\
+ src/transactions/tsip_transac_nist.c
+
+libtinySIP_la_SOURCES += src/transports/tsip_transport.c\
+ src/transports/tsip_transport_ipsec.c\
+ src/transports/tsip_transport_layer.c\
+ src/transports/tsip_transport_tls.c
+
+
+libtinySIP_la_LDFLAGS = $LDFLAGS -no-undefined
+if TARGET_OS_IS_ANDROID
+libtinySIP_la_LDFLAGS += -static
+endif
+
+_includedir = $(includedir)/tinysip
+_include_HEADERS = include/*.h
+__includedir = $(includedir)/tinysip/tinysip
+__include_HEADERS = include/tinysip/*.h
+api_includedir = $(includedir)/tinysip/tinysip/api
+api_include_HEADERS = include/tinysip/api/*.h
+authentication_includedir = $(includedir)/tinysip/tinysip/authentication
+authentication_include_HEADERS = include/tinysip/authentication/*.h
+dialogs_includedir = $(includedir)/tinysip/tinysip/dialogs
+dialogs_include_HEADERS = include/tinysip/dialogs/*.h
+headers_includedir = $(includedir)/tinysip/tinysip/headers
+headers_include_HEADERS = include/tinysip/headers/*.h
+parsers_includedir = $(includedir)/tinysip/tinysip/parsers
+parsers_include_HEADERS = include/tinysip/parsers/*.h
+sigcomp_includedir = $(includedir)/tinysip/tinysip/sigcomp
+sigcomp_include_HEADERS = include/tinysip/sigcomp/*.h
+transactions_includedir = $(includedir)/tinysip/tinysip/transactions
+transactions_include_HEADERS = include/tinysip/transactions/*.h
+transports_includedir = $(includedir)/tinysip/tinysip/transports
+transports_include_HEADERS = include/tinysip/transports/*.h
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = tinySIP.pc
+
+
+
diff --git a/tinySIP/abnf/core.abnf b/tinySIP/abnf/core.abnf
new file mode 100644
index 0000000..f359b4c
--- /dev/null
+++ b/tinySIP/abnf/core.abnf
@@ -0,0 +1,1053 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; RFC 5234 - ABNF CORE RULES
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+OCTET= %x00-FF ; 8 bits of data
+CHAR= %x01-7F ; any 7-bit US-ASCII character, excluding NUL
+VCHAR= %x21-7E ; visible (printing) characters
+ALPHA= %x41-5A / %x61-7A ; A-Z / a-z
+DIGIT= %x30-39 ; 0-9
+
+CTL= %x00-1F / %x7F ; any US-ASCII control character: ; (octets 0 - 31) and DEL (127)
+
+HTAB= %x09 ; horizontal tab
+LF= %x0A ; linefeed
+CR= %x0D ; carriage return
+SP= %x20 ; space
+DQUOTE= %x22 ; " (Double Quote)
+BIT= "0" / "1"
+
+HEXDIG= DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
+
+CRLF= CR LF ; Internet standard newline
+WSP= SP / HTAB ; white space
+LWSP= *(WSP / CRLF WSP) ; linear white space (past newline)
+;---------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; Most common definitions in Header Fields
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;; accept-param
+accept-param = ("q" EQUAL qvalue ) / generic-param
+
+;;;; addr-spec
+addr-spec = SIP-URI / SIPS-URI / absoluteURI
+
+;;;; algorithm
+algorithm = "algorithm" EQUAL ( aka-namespace / algorithm-value )
+aka-namespace = aka-version "-" algorithm-value
+aka-version = "AKAv" 1*DIGIT
+algorithm-value = ( "MD5" / "MD5-sess" / token )
+
+;;;; callid
+callid = word [ "@" word ]
+
+;;;; delta-seconds
+delta-seconds = 1*DIGIT
+
+;;;; generic-param
+generic-param = token [ EQUAL gen-value ]
+gen-value = token / host / quoted-string
+
+;;;; name-addr
+name-addr = [ display-name ] LAQUOT addr-spec RAQUOT
+display-name = *(token LWS) / quoted-string
+
+;;;; nonce
+nonce = "nonce" EQUAL ( aka-nonce / nonce-value )
+aka-nonce = LDQUOT aka-nonce-value RDQUOT
+aka-nonce-value = <base64 encoding of RAND, AUTN, and server specific data>
+nonce-value = quoted-string
+
+;;;; not-defined ; This is my own ...
+not-defined = token
+
+;;;; option-tag
+option-tag = token
+
+;;;; qvalue
+qvalue = ("0" [ "." 0*3DIGIT ] ) / ( "1" [ "." 0*3("0") ] )
+
+;;;; pname
+pname = 1*paramchar
+
+;;;; pvalue
+pvalue = 1*paramchar
+
+;---------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; URIs --> SIP / SIPS / TEL
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;---------------------
+; SIP-URI / SIPS-URI
+;---------------------
+SIP-URI = "sip:" [ userinfo ] hostport uri-parameters [ headers ]
+SIPS-URI = "sips:" [ userinfo ] hostport uri-parameters [ headers ]
+
+;---------------------
+; URI -- userinfo
+;---------------------
+userinfo = ( user / telephone-subscriber ) [ ":" password ] "@"
+user = 1*( unreserved / escaped / user-unreserved )
+user-unreserved = "&" / "=" / "+" / "$" / "," / ";" / "?" / "/"
+password = *( unreserved / escaped / "&" / "=" / "+" / "$" / "," )
+
+;---------------------
+; URI -- hostport
+;---------------------
+hostport = host [ ":" port ]
+host = hostname / IPv4address / IPv6reference
+hostname = *( domainlabel "." ) toplabel [ "." ]
+domainlabel = alphanum / alphanum *( alphanum / "-" ) alphanum
+toplabel = ALPHA / ALPHA *( alphanum / "-" ) alphanum
+IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
+IPv6reference = "[" IPv6address "]"
+IPv6address = hexpart [ ":" IPv4address ]
+hexpart = hexseq / hexseq "::" [ hexseq ] / "::" [ hexseq ]
+hexseq = hex4 *( ":" hex4 )
+hex4 = 1*4HEXDIG
+port = 1*DIGIT
+
+;---------------------
+; URI -- uri-parameters
+;---------------------
+uri-parameters = *( ";" uri-parameter )
+uri-parameter = transport-param / user-param / method-param / ttl-param / maddr-param / lr-param / compression-param / target-param / cause-param / orig / gr-param / other-param
+
+;;;; transport-param
+transport-param = "transport=" ( "udp" / "tcp" / "sctp" / "tls" / "tls-sctp" / other-transport )
+other-transport = token
+
+;;;; user-param
+user-param = "user=" ( "phone" / "ip" / "dialstring" / other-user )
+other-user = token
+dialstring = dialstring-digits context
+dialstring-digits = *dialstring-element dialstring-digit *dialstring-element
+dialstring-digit = HEXDIG / "*" / "#"
+dialstring-element = dialstring-digit / "P" / "X" / visual-separator
+
+;;;; method-param
+method-param = "method=" Method
+
+;;;; ttl-param
+ttl-param = "ttl=" ttl
+
+;;;; maddr-param
+maddr-param = "maddr=" host
+
+;;;; lr-param
+lr-param = "lr"
+
+;;;; compression-param
+compression-param = "comp=" ( "sigcomp" / other-compression )
+other-compression = token
+
+;;;; target-param
+target-param = "target" EQUAL pvalue
+
+;;;; cause-param
+cause-param = "cause" EQUAL Status-Code
+
+;;;; orig
+orig = "orig"
+
+;;;; gr-param
+gr-param = "gr" [ "=" pvalue ]
+
+;;;; other-param
+other-param = pname [ "=" pvalue ]
+paramchar = param-unreserved / unreserved / escaped
+param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
+
+
+;---------------------
+; URI -- headers
+;---------------------
+headers = "?" header *( "&" header )
+header = hname [ "=" hvalue ]
+hname = 1*( hnv-unreserved / unreserved / escaped )
+hvalue = *( hnv-unreserved / unreserved / escaped )
+hnv-unreserved = "[" / "]" / "/" / "?" / ":" / "+" / "$"
+
+;---------------------
+; absoluteURI
+;---------------------
+absoluteURI = scheme ":" ( hier-part / opaque-part )
+hier-part = ( net-path / abs-path ) [ "?" query ]
+net-path = "//" authority [ abs-path ]
+abs-path = "/" path-segments
+query = *uric
+opaque-part = uric-no-slash *uric
+uric = reserved / unreserved / escaped
+uric-no-slash = unreserved / escaped / ";" / "?" / ":" / "@" / "&" / "=" / "+" / "$" / ","
+path-segments = segment *( "/" segment )
+segment = *pchar *( ";" param )
+param = *pchar
+pchar = unreserved / escaped / ":" / "@" / "&" / "=" / "+" / "$" / ","
+scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+authority = srvr / reg-name
+srvr = [ [ userinfo "@" ] hostport ]
+reg-name = 1*( unreserved / escaped / "$" / "," / ";" / ":" / "@" / "&" / "=" / "+" )
+
+;---------------------
+; telephone-URI
+;---------------------
+telephone-uri = "tel:" telephone-subscriber
+telephone-subscriber = global-number / local-number
+global-number = global-number-digits *par
+local-number = local-number-digits *par context *par
+
+;;;; par
+par = parameter / extension / isdn-subaddress / rn / cic / npdi / enum-dip-indicator / trunk-group / trunk-context
+
+;;;; context
+context = ";phone-context=" descriptor
+
+;;;; parameter
+parameter = ";" pname [ "=" pvalue ]
+paramchar = param-unreserved / unreserved / pct-encoded
+pct-encoded = "%" HEXDIG HEXDIG
+param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
+
+;;;; extension
+extension = ";ext=" 1*phonedigit
+
+;;;; isdn-subaddress
+isdn-subaddress = ";isub=" 1*uric
+
+;;;; isub-encoding
+isub-encoding = isub-encoding-tag "=" isub-encoding-value
+isub-encoding-tag = "isub-encoding"
+isub-encoding-value = "nsap-ia5" / "nsap-bcd" / "nsap" / token
+
+;;;; Number Portability Parameters: rn, npdi, cic
+rn = ";rn=" ( global-rn / local-rn )
+cic = ";cic=" ( global-cic / local-cic )
+npdi = ";npdi"
+global-rn = not-defined
+
+;;;; global-rn = global-hex-digits
+local-rn = 1*hex-phonedigit rn-context
+rn-context = ";rn-context=" rn-descriptor
+rn-descriptor = domainname / global-hex-digits
+global-hex-digits = "+" 1*3(DIGIT) *hex-phonedigit
+hex-phonedigit = HEXDIG / visual-separator
+global-cic = global-hex-digits
+local-cic = 1*hex-phonedigit cic-context
+cic-context = ";cic-context=" rn-descriptor
+
+;;;; enum-dip-indicator
+enum-dip-indicator = ";enumdi"
+
+;;;; trunk-group
+trunk-group = ";tgrp=" trunk-group-label
+trunk-context = ";trunk-context=" descriptor
+trunk-group-label = 1*( unreserved / escaped / trunk-group-unreserved )
+trunk-group-unreserved = "/" / "&" / "+" / "$"
+
+;;;; descriptor
+descriptor = domainname / global-number-digits
+
+;;;; global- & local-number-digits
+global-number-digits = "+" *phonedigit DIGIT *phonedigit
+local-number-digits = *phonedigit-hex ( HEXDIG / "*" / "#" ) *phonedigit-hex
+phonedigit = DIGIT / [ visual-separator ]
+phonedigit-hex = HEXDIG / "*" / "#" / [ visual-separator ]
+visual-separator = "-" / "." / "(" / ")"
+
+;;;; domainname
+domainname = *( domainlabel "." ) toplabel [ "." ]
+domainlabel = alphanum / alphanum *( alphanum / "-" ) alphanum
+toplabel = ALPHA / ALPHA *( alphanum / "-" ) alphanum
+
+
+
+
+;---------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; RFC 3261 - SIP ABNF
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; alphanum
+alphanum = ALPHA / DIGIT
+
+;;;; LHEX
+LHEX = DIGIT / %x61-66 ; lowercase a-f
+
+;;;; WS
+LWS = [*WSP CRLF] 1*WSP ; linear whitespace
+SWS = [LWS] ; sep whitespace
+
+;;;; HCOLON
+HCOLON = *( SP / HTAB ) ":" SWS
+
+;;;; separators
+separators = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" / DQUOTE / "/" / "[" / "]" / "?" / "=" / "{" / "}" / SP / HTAB
+
+;;;; SWS-based delimiters
+STAR = SWS "*" SWS ; asterisk
+SLASH = SWS "/" SWS ; slash
+EQUAL = SWS "=" SWS ; equal
+LPAREN = SWS "(" SWS ; left parenthesis
+RPAREN = SWS ")" SWS ; right parenthesis
+LAQUOT = SWS "<" ; left angle quote
+RAQUOT = ">" SWS ; right angle quote
+COMMA = SWS "," SWS ; comma
+SEMI = SWS ";" SWS ; semicolon
+COLON = SWS ":" SWS ; colon
+LDQUOT = SWS DQUOTE ; open double quotation mark
+RDQUOT = DQUOTE SWS ; close double quotation mark
+
+;;;; token
+token = 1*( alphanum / "-" / "." / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
+
+;;;; quoted-string
+quoted-string = SWS DQUOTE *( qdtext / quoted-pair ) DQUOTE
+qdtext = LWS / %x21 / %x23-5B / %x5D-7E / UTF8-NONASCII
+quoted-pair = "\" ( %x00-09 / %x0B-0C / %x0E-7F )
+
+;;;; comment
+comment = LPAREN *( ctext / quoted-pair / comment-comment ) RPAREN
+ctext = %x21-27 / %x2A-5B / %x5D-7E / UTF8-NONASCII / LWS
+comment-comment = not-defined
+
+;;;; word
+word = 1*( alphanum / "-" / "." / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" / "(" / ")" / "<" / ">" / ":" / "\" / DQUOTE / "/" / "[" / "]" / "?" / "{" / "}" )
+
+;;;; text
+TEXT-UTF8-TRIM = 1*TEXT-UTF8char *(*LWS TEXT-UTF8char)
+TEXT-UTF8char = %x21-7E / UTF8-NONASCII
+UTF8-NONASCII = %xC0-DF 1UTF8-CONT / %xE0-EF 2UTF8-CONT / %xF0-F7 3UTF8-CONT / %xF8-FB 4UTF8-CONT / %xFC-FD 5UTF8-CONT
+UTF8-CONT = %x80-BF
+
+;;;; escaped
+escaped = "%" HEXDIG HEXDIG
+
+;;;; mark
+mark = "-" / "_" / "." / "!" / "~" / "*" / "'" / "(" / ")"
+
+;;;; reserved / unreserved
+reserved = ";" / "/" / "?" / ":" / "@" / "&" / "=" / "+" / "$" / ","
+unreserved = alphanum / mark
+
+;---------------------
+; SIP MESSAGE
+;---------------------
+
+;;;; SIP-message
+SIP-message = Request / Response
+
+;;;; Request
+Request = Request-Line *( message-header ) CRLF [ message-body ]
+
+;;;; Response
+Response = Status-Line *( message-header ) CRLF [ message-body ]
+
+;;;; Request-Line
+Request-Line = Method SP Request-URI SP SIP-Version CRLF
+
+;;;; Status-Line
+Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
+
+;;;; Method
+Method = INVITEm / ACKm / OPTIONSm / BYEm / CANCELm / REGISTERm / INFOm / PRACKm / SUBSCRIBEm / NOTIFYm / UPDATEm / MESSAGEm / REFERm / PUBLISHm / extension-method
+
+INVITEm = %x49.4E.56.49.54.45 ; INVITE in caps [RFC3261]
+ACKm = %x41.43.4B ; ACK in caps [RFC3261]
+OPTIONSm = %x4F.50.54.49.4F.4E.53 ; OPTIONS in caps [RFC3261]
+BYEm = %x42.59.45 ; BYE in caps [RFC3261]
+CANCELm = %x43.41.4E.43.45.4C ; CANCEL in caps [RFC3261]
+REGISTERm = %x52.45.47.49.53.54.45.52 ; REGISTER in caps [RFC3261]
+INFOm = %x49.4E.46.4F ; INFO in caps [RFC2976]
+PRACKm = %x50.52.41.43.4B ; PRACK in caps [RFC3262]
+SUBSCRIBEm = %x53.55.42.53.43.52.49.42.45 ; SUBSCRIBE in caps [RFC3265]
+NOTIFYm = %x4E.4F.54.49.46.59 ; NOTIFY in caps [RFC3265]
+UPDATEm = %x55.50.44.41.54.45 ; UPDATE in caps [RFC3311]
+MESSAGEm = %x4D.45.53.53.41.47.45 ; MESSAGE in caps [RFC3428]
+REFERm = %x52.45.46.45.52 ; REFER in caps [RFC3515]
+PUBLISHm = %x50.55.42.4C.49.53.48 ; PUBLISH in caps [RFC3903]
+
+extension-method = token
+
+;;;; Request-URI
+Request-URI = SIP-URI / SIPS-URI / absoluteURI
+
+;;;; SIP-Version
+SIP-Version = "SIP" "/" 1*DIGIT "." 1*DIGIT
+
+;;;; message-header
+message-header = ( Accept / Accept-Contact / Accept-Encoding / Accept-Language / Accept-Resource-Priority / Alert-Info / Allow / Allow-Events / Authentication-Info / Authorization / Call-ID / Call-Info / Contact / Content-Disposition / Content-Encoding / Content-Language / Content-Length / Content-Type / CSeq / Date / Error-Info / Event / Expires / From / History-Info / Identity / Identity-Info / In-Reply-To / Join / Max-Forwards / MIME-Version / Min-Expires / Min-SE / Organization / Path / Priority / Privacy / Proxy-Authenticate / Proxy-Authorization / Proxy-Require / RAck / Reason / Record-Route / Refer-Sub / Refer-To / Referred-By / Reject-Contact / Replaces / Reply-To / Request-Disposition / Require / Resource-Priority / Retry-After / Route / RSeq / Security-Client / Security-Server / Security-Verify / Server / Service-Route / Session-Expires / SIP-ETag / SIP-If-Match / Subject / Subscription-State / Supported / Target-Dialog / Timestamp / To / Unsupported / User-Agent / Via / Warning / WWW-Authenticate / P-Access-Network-Info / P-Answer-State / P-Asserted-Identity / P-Associated-URI / P-Called-Party-ID / P-Charging-Function-Addresses / P-Charging-Vector / P-DCS-Billing-Info / P-DCS-LAES / P-DCS-OSPS / P-DCS-Redirect / P-DCS-Trace-Party-ID / P-Early-Media / P-Media-Authorization / P-Preferred-Identity / P-Profile-Key / P-User-Database / P-Visited-Network-ID / extension-header ) CRLF
+
+extension-header = header-name HCOLON header-value
+header-name = token
+header-value = *( TEXT-UTF8char / UTF8-CONT / LWS )
+
+;;;; message-body
+message-body = *OCTET
+
+;---------------------
+; SIP Header Fields
+;---------------------
+;;;; Accept
+Accept = "Accept" HCOLON [ accept-range *(COMMA accept-range) ]
+accept-range = media-range *(SEMI accept-param)
+media-range = ( "*/*" / ( m-type SLASH "*" ) / ( m-type SLASH m-subtype ) ) *( SEMI m-parameter )
+
+;;;; Accept-Contact / a
+Accept-Contact = ( "Accept-Contact" / "a" ) HCOLON ac-value *(COMMA ac-value)
+ac-value = "*" *(SEMI ac-params)
+ac-params = feature-param / req-param / explicit-param / generic-param
+req-param = "require"
+explicit-param = "explicit"
+
+;;;; Accept-Encoding
+Accept-Encoding = "Accept-Encoding" HCOLON [ encoding *(COMMA encoding) ]
+encoding = codings *(SEMI accept-param)
+codings = content-coding / "*"
+
+;;;; Accept-Language
+Accept-Language = "Accept-Language" HCOLON [ language *(COMMA language) ]
+language = language-range *(SEMI accept-param)
+language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) / "*" )
+
+;;;; Accept-Resource-Priority
+Accept-Resource-Priority = "Accept-Resource-Priority" HCOLON [r-value *(COMMA r-value)]
+
+;;;; Alert-Info
+Alert-Info = "Alert-Info" HCOLON alert-param *(COMMA alert-param)
+alert-param = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
+
+;;;; Allow
+Allow = "Allow" HCOLON [Method *(COMMA Method)]
+
+;;;; Allow-Events / u
+Allow-Events = ( "Allow-Events" / "u" ) HCOLON event-type *(COMMA event-type)
+
+;;;; Answer-Mode
+Answer-Mode = "Answer-Mode" HCOLON answer-mode-value *(SEMI answer-mode-param)
+answer-mode-value = "Manual" / "Auto" / token
+answer-mode-param = "require" / generic-param
+
+;;;; Authentication-Info
+Authentication-Info = "Authentication-Info" HCOLON ainfo *(COMMA ainfo)
+ainfo = nextnonce / message-qop / response-auth / cnonce / nonce-count
+nextnonce = "nextnonce" EQUAL nonce-value
+response-auth = "rspauth" EQUAL response-digest
+response-digest = LDQUOT *LHEX RDQUOT
+
+;;;; Authorization
+Authorization = "Authorization" HCOLON credentials
+credentials = ("Digest" LWS digest-response) / other-response
+digest-response = dig-resp *(COMMA dig-resp)
+dig-resp = username / realm / nonce / digest-uri / dresponse / algorithm / cnonce / opaque / message-qop / nonce-count / auth-param / auts
+username = "username" EQUAL username-value
+username-value = quoted-string
+digest-uri = "uri" EQUAL LDQUOT digest-uri-value RDQUOT
+digest-uri-value = auth-request-uri ; equal to request-uri as specified by HTTP/1.1
+message-qop = "qop" EQUAL qop-value
+cnonce = "cnonce" EQUAL cnonce-value
+cnonce-value = nonce-value
+nonce-count = "nc" EQUAL nc-value
+nc-value = 8LHEX
+dresponse = "response" EQUAL request-digest
+request-digest = LDQUOT 32LHEX RDQUOT
+auth-request-uri = not-defined
+
+auth-param = auth-param-name EQUAL ( token / quoted-string )
+auth-param-name = token
+
+other-response = auth-scheme LWS auth-param *(COMMA auth-param)
+auth-scheme = token
+auts = "auts" EQUAL auts-param
+auts-param = LDQUOT auts-value RDQUOT
+auts-value = <base64 encoding of AUTS>
+
+;;;; Call-ID / i
+Call-ID = ( "Call-ID" / "i" ) HCOLON callid
+
+;;;; Call-Info
+Call-Info = "Call-Info" HCOLON info *(COMMA info)
+info = LAQUOT absoluteURI RAQUOT *( SEMI info-param )
+info-param = ( "purpose" EQUAL ( "icon" / "info" / "card" / "list-management" / token ) ) / generic-param
+
+;;;; Contact / m
+Contact = ( "Contact" / "m" ) HCOLON ( STAR / (contact-param *(COMMA contact-param)))
+contact-param = (name-addr / addr-spec) *( SEMI contact-params)
+contact-params = c-p-q / c-p-expires / feature-param / temp-gruu / pub-gruu / c-p-instance / contact-extension
+c-p-q = "q" EQUAL qvalue
+c-p-expires = "expires" EQUAL delta-seconds
+feature-param = enc-feature-tag [ EQUAL LDQUOT (tag-value-list / string-value) RDQUOT ]
+enc-feature-tag = base-tags / other-tags
+base-tags = "audio" / "automata" / "class" / "duplex" / "data" / "control" / "mobility" / "description" / "events" / "priority" / "methods" / "schemes" / "application" / "video" / "language" / "type" / "isfocus" / "actor" / "text" / "extensions"
+other-tags = "+" ftag-name
+ftag-name = ALPHA *( ALPHA / DIGIT / "!" / "'" / "." / "-" / "%" )
+tag-value-list = tag-value *("," tag-value)
+tag-value = ["!"] (token-nobang / boolean / numeric)
+token-nobang = 1*( alphanum / "-" / "." / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
+boolean = "TRUE" / "FALSE"
+numeric = "#" numeric-relation number
+numeric-relation = ">=" / "<=" / "=" / (number ":")
+number = [ "+" / "-" ] 1*DIGIT ["." 0*DIGIT]
+string-value = "<" *(qdtext-no-abkt / quoted-pair ) ">"
+qdtext-no-abkt = LWS / %x21 / %x23-3B / %x3D / %x3F-5B / %x5D-7E / UTF8-NONASCII
+temp-gruu = "temp-gruu" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
+pub-gruu = "pub-gruu" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
+c-p-instance = "+sip.instance" EQUAL LDQUOT "<" instance-val ">" RDQUOT
+instance-val = *uric
+contact-extension = generic-param
+
+;;;; Content-Disposition
+Content-Disposition = "Content-Disposition" HCOLON disp-type *( SEMI disp-param )
+disp-type = "render" / "session" / "icon" / "alert" / "aib" / "early-session" / disp-extension-token
+disp-param = handling-param / generic-param
+handling-param = "handling" EQUAL ( "optional" / "required" / other-handling )
+other-handling = token
+disp-extension-token = token
+
+;;;; Content-Encoding / e
+Content-Encoding = ( "Content-Encoding" / "e" ) HCOLON content-coding *(COMMA content-coding)
+content-coding = token
+
+;;;; Content-Language
+Content-Language = "Content-Language" HCOLON language-tag *(COMMA language-tag)
+language-tag = primary-tag *( "-" subtag )
+primary-tag = 1*8ALPHA
+subtag = 1*8ALPHA
+
+;;;; Content-Length / l
+Content-Length = ( "Content-Length" / "l" ) HCOLON 1*DIGIT
+
+;;;; Content-Type / c
+Content-Type = ( "Content-Type" / "c" ) HCOLON media-type
+media-type = m-type SLASH m-subtype *( SEMI m-parameter)
+m-type = discrete-type / composite-type
+discrete-type = "text" / "image" / "audio" / "video" / "application" / extension-token
+composite-type = "message" / "multipart" / extension-token
+extension-token = ietf-token / x-token
+ietf-token = token
+x-token = "x-" token
+m-subtype = extension-token / iana-token
+iana-token = token
+m-parameter = m-attribute EQUAL m-value
+m-attribute = token
+m-value = token / quoted-string
+
+;;;; CSeq
+CSeq = "CSeq" HCOLON 1*DIGIT LWS Method
+
+;;;; Date
+Date = "Date" HCOLON SIP-date
+SIP-date = rfc1123-date
+rfc1123-date = wkday "," SP date1 SP time SP "GMT"
+date1 = 2DIGIT SP month SP 4DIGIT
+time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
+wkday = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
+month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
+
+;;;; Error-Info
+Error-Info = "Error-Info" HCOLON error-uri *(COMMA error-uri)
+error-uri = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
+
+;;;; Event / o
+Event = ( "Event" / "o" ) HCOLON event-type *( SEMI event-param )
+event-type = event-package *( "." event-template )
+event-package = token-nodot
+event-template = token-nodot
+token-nodot = 1*( alphanum / "-" / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
+event-param = generic-param / ( "id" EQUAL token ) / call-ident / from-tag / to-tag / with-sessd
+call-ident = "call-id" EQUAL ( token / DQUOTE callid DQUOTE )
+with-sessd = "include-session-description"
+
+;;;; Expires
+Expires = "Expires" HCOLON delta-seconds
+
+;;;; From / f
+From = ( "From" / "f" ) HCOLON from-spec
+from-spec = ( name-addr / addr-spec ) *( SEMI from-param )
+from-param = tag-param / generic-param
+tag-param = "tag" EQUAL token
+
+;;;; History-Info
+History-Info = "History-Info" HCOLON hi-entry *(COMMA hi-entry)
+hi-entry = hi-targeted-to-uri *( SEMI hi-param )
+hi-targeted-to-uri = name-addr
+hi-param = hi-index / hi-extension
+hi-index = "index" EQUAL 1*DIGIT *("." 1*DIGIT)
+hi-extension = generic-param
+
+;;;; Identity / y
+Identity = "Identity" HCOLON signed-identity-digest
+signed-identity-digest = LDQUOT 32LHEX RDQUOT
+
+;;;; Identity-Info / n
+Identity-Info = "Identity-Info" HCOLON ident-info *( SEMI ident-info-params )
+ident-info = LAQUOT absoluteURI RAQUOT
+ident-info-params = ident-info-alg / ident-info-extension
+ident-info-alg = "alg" EQUAL token
+ident-info-extension = generic-param
+
+;;;; In-Reply-To
+In-Reply-To = "In-Reply-To" HCOLON callid *(COMMA callid)
+
+;;;; Join
+Join = "Join" HCOLON callid *(SEMI join-param)
+join-param = join-to-tag / join-from-tag / generic-param
+join-to-tag = "to-tag" EQUAL token
+join-from-tag = "from-tag" EQUAL token
+
+;;;; Max-Breadth
+Max-Breadth = "Max-Breadth" HCOLON 1*DIGIT
+
+;;;; Max-Forwards
+Max-Forwards = "Max-Forwards" HCOLON 1*DIGIT
+
+;;;; MIME-Version
+MIME-Version = "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT
+
+;;;; Min-Expires
+Min-Expires = "Min-Expires" HCOLON delta-seconds
+
+;;;; Min-SE
+Min-SE = "Min-SE" HCOLON delta-seconds *(SEMI generic-param)
+
+;;;; Organization
+Organization = "Organization" HCOLON [TEXT-UTF8-TRIM]
+
+;;;; P-Access-Network-Info
+P-Access-Network-Info = "P-Access-Network-Info" HCOLON access-net-spec
+access-net-spec = access-type *( SEMI access-info )
+access-type = "IEEE-802.11a" / "IEEE-802.11b" / "3GPP-GERAN" / "3GPP-UTRAN-FDD" / "3GPP-UTRAN-TDD" / "3GPP-CDMA2000" / token
+access-info = cgi-3gpp / utran-cell-id-3gpp / extension-access-info
+extension-access-info = gen-value
+cgi-3gpp = "cgi-3gpp" EQUAL (token / quoted-string)
+utran-cell-id-3gpp = "utran-cell-id-3gpp" EQUAL (token / quoted-string)
+
+;;;; P-Answer-State
+P-Answer-State = "P-Answer-State" HCOLON answer-type *(SEMI generic-param)
+answer-type = "Confirmed" / "Unconfirmed" / token
+
+;;; P-Asserted-Identity
+P-Asserted-Identity = PAssertedID
+PAssertedID = "P-Asserted-Identity" HCOLON PAssertedID-value *(COMMA PAssertedID-value)
+PAssertedID-value = name-addr / addr-spec
+
+;;;; P-Associated-URI
+P-Associated-URI = "P-Associated-URI" HCOLON p-aso-uri-spec *(COMMA p-aso-uri-spec)
+p-aso-uri-spec = name-addr *( SEMI ai-param )
+ai-param = generic-param
+
+;;;; P-Called-Party-ID
+P-Called-Party-ID = "P-Called-Party-ID" HCOLON called-pty-id-spec
+called-pty-id-spec = name-addr *( SEMI cpid-param )
+cpid-param = generic-param
+
+;;;; P-Charging-Function-Addresses
+P-Charging-Function-Addresses = P-Charging-Addr
+P-Charging-Addr = "P-Charging-Function-Addresses" HCOLON charge-addr-params *( SEMI charge-addr-params )
+charge-addr-params = ccf / ecf / generic-param
+ccf = "ccf" EQUAL gen-value
+ecf = "ecf" EQUAL gen-value
+
+;;;; P-Charging-Vector
+P-Charging-Vector = "P-Charging-Vector" HCOLON icid-value *( SEMI charge-params )
+charge-params = icid-gen-addr / orig-ioi / term-ioi / generic-param
+icid-value = "icid-value" EQUAL gen-value
+icid-gen-addr = "icid-generated-at" EQUAL host
+orig-ioi = "orig-ioi" EQUAL gen-value
+term-ioi = "term-ioi" EQUAL gen-value
+
+;;;; P-DCS-Billing-Info
+P-DCS-Billing-Info = "P-DCS-Billing-Info" HCOLON Billing-Correlation-ID "/" FEID *( SEMI Billing-Info-param )
+Billing-Correlation-ID = 1*48(HEXDIG)
+FEID = 1*16(HEXDIG) "@" host
+Billing-Info-param = RKS-Group-ID-param / Charge-param / Calling-param / Called-param / Routing-param / Loc-Routing-param / JIP-param / generic-param
+RKS-Group-ID-param = "rksgroup" EQUAL RKS-Group-ID
+RKS-Group-ID = token
+Charge-param = "charge" EQUAL Acct-Charge-URI
+Acct-Charge-URI = LDQUOT addr-spec RDQUOT
+Calling-param = "calling" EQUAL Acct-Calling-URI
+Acct-Calling-URI = LDQUOT addr-spec RDQUOT
+Called-param = "called" EQUAL Acct-Called-URI
+Acct-Called-URI = LDQUOT addr-spec RDQUOT
+Routing-param = "routing" EQUAL Acct-Routing-URI
+Acct-Routing-URI = LDQUOT addr-spec RDQUOT
+Loc-Routing-param = "locroute" EQUAL Acct-Loc-Routing-URI
+Acct-Loc-Routing-URI = LDQUOT addr-spec RDQUOT
+JIP-param = "jip" EQUAL jip
+jip = LDQUOT 1*phonedigit-hex jip-context RDQUOT
+jip-context = ";jip-context=" jip-descriptor
+jip-descriptor = global-hex-digits
+global-hex-digits = "+" 1*3(phonedigit) *phonedigit-hex
+phonedigit = DIGIT / [ visual-separator ]
+phonedigit-hex = HEXDIG / "*" / "#" / [ visual-separator ]
+visual-separator = "-" / "." / "(" / ")"
+
+;;;; P-DCS-LAES
+P-DCS-LAES = "P-DCS-LAES" HCOLON Laes-sig *( SEMI Laes-param )
+Laes-sig = hostport
+Laes-param = Laes-content / Laes-cccid / Laes-bcid / generic-param
+Laes-content = "content" EQUAL hostport
+Laes-cccid = "cccid" EQUAL 1*8(HEXDIG)
+Laes-bcid = "cccid" EQUAL 1*48(HEXDIG)
+
+;;;; P-DCS-OSPS
+P-DCS-OSPS = "P-DCS-OSPS" HCOLON OSPS-Tag
+OSPS-Tag = "BLV" / "EI" / "RING" / token
+
+;;;; P-DCS-Redirect
+P-DCS-Redirect = "P-DCS-Redirect" HCOLON Called-ID *(SEMI redir-params)
+Called-ID = LDQUOT addr-spec RDQUOT
+redir-params = redir-uri-param / redir-count-param / generic-param
+redir-uri-param = "redirector-uri" EQUAL Redirector
+Redirector = LDQUOT addr-spec RDQUOT
+redir-count-param = "count" EQUAL Redir-count
+Redir-count = 1*DIGIT
+
+;;;; P-DCS-Trace-Party-ID
+P-DCS-Trace-Party-ID = "P-DCS-Trace-Party-ID" HCOLON name-addr *1(SEMI timestamp-param) *(SEMI trace-param)
+timestamp-param = "timestamp=" 1*DIGIT ["." 1*DIGIT]
+trace-param = generic-param
+
+;;;; P-Early-Media
+P-Early-Media = "P-Early-Media" HCOLON [ em-param *(COMMA em-param) ]
+em-param = "sendrecv" / "sendonly" / "recvonly" / "inactive" / "gated" / "supported" / token
+
+;;;; P-Media-Authorization
+P-Media-Authorization = "P-Media-Authorization" HCOLON P-Media-Authorization-Token *(COMMA P-Media-Authorization-Token)
+P-Media-Authorization-Token = 1*HEXDIG
+
+;;;; P-Preferred-Identity
+P-Preferred-Identity = PPreferredID
+PPreferredID = "P-Preferred-Identity" HCOLON PPreferredID-value *(COMMA PPreferredID-value)
+PPreferredID-value = name-addr / addr-spec
+
+;;;; P-Profile-Key
+P-Profile-Key = "P-Profile-Key" HCOLON (name-addr / addr-spec) *(SEMI generic-param)
+
+;;;; P-Refused-URI-List
+P-Refused-URI-List = "P-Refused-URI-List" HCOLON uri-list-entry *(COMMA uri-list-entry)
+uri-list-entry = ( name-addr / addr-spec ) *(SEMI refused-param)
+refused-param = members-param / generic-param
+members-param = "members" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
+
+;;;; P-Served-User
+P-Served-User = "P-Served-User" HCOLON PServedUser-value *(served-user-param)
+served-user-param = sessioncase-param / registration-state-param / generic-param
+PServedUser-value = name-addr / addr-spec
+sessioncase-param = "sescase" EQUAL "orig" / "term"
+registration-state-param = "regstate" EQUAL "unreg" / "reg"
+
+;;;; P-User-Database
+P-User-Database = "P-User-Database" HCOLON database *(SEMI generic-param)
+database = LAQUOT DiameterURI RAQUOT
+DiameterURI = not-defined
+
+;;;; P-Visited-Network-ID
+P-Visited-Network-ID = "P-Visited-Network-ID" HCOLON vnetwork-spec *(COMMA vnetwork-spec)
+vnetwork-spec = (token / quoted-string) *( SEMI vnetwork-param )
+vnetwork-param = generic-param
+
+;;;; Path
+Path = "Path" HCOLON path-value *(COMMA path-value)
+path-value = name-addr *( SEMI rr-param )
+
+;;;; Permission-Missing
+Permission-Missing = "Permission-Missing" HCOLON per-miss-spec *(COMMA per-miss-spec)
+per-miss-spec = ( name-addr / addr-spec ) *( SEMI generic-param )
+
+;;;; Priority
+Priority = "Priority" HCOLON priority-value
+priority-value = "emergency" / "urgent" / "normal" / "non-urgent" / other-priority
+other-priority = token
+
+;;;; Privacy
+Privacy = Privacy-hdr
+Privacy-hdr = "Privacy" HCOLON priv-value *(";" priv-value)
+priv-value = "header" / "session" / "user" / "none" / "critical" / "id" / "history" / token
+
+;;;; Priv-Answer-Mode
+Priv-Answer-Mode = "Priv-Answer-Mode" HCOLON answer-mode-value *(SEMI answer-mode-param)
+
+;;;; Proxy-Authenticate
+Proxy-Authenticate = "Proxy-Authenticate" HCOLON challenge
+challenge = ("Digest" LWS digest-cln *(COMMA digest-cln)) / other-challenge
+other-challenge = auth-scheme / auth-param *(COMMA auth-param)
+digest-cln = realm / domain / nonce / opaque / stale / algorithm / qop-options / auth-param
+realm = "realm" EQUAL realm-value
+realm-value = quoted-string
+domain = "domain" EQUAL LDQUOT URI *( 1*SP URI ) RDQUOT
+URI = absoluteURI / abs-path
+opaque = "opaque" EQUAL quoted-string
+stale = "stale" EQUAL ( "true" / "false" )
+qop-options = "qop" EQUAL LDQUOT qop-value *("," qop-value) RDQUOT
+qop-value = "auth" / "auth-int" / token
+
+;;;; Proxy-Authorization
+Proxy-Authorization = "Proxy-Authorization" HCOLON credentials
+
+
+;;;; Proxy-Require
+Proxy-Require = "Proxy-Require" HCOLON option-tag *(COMMA option-tag)
+
+;;;; RAck
+RAck = "RAck" HCOLON response-num LWS CSeq-num LWS Method
+response-num = 1*DIGIT
+CSeq-num = 1*DIGIT
+
+;;;; Reason
+Reason = "Reason" HCOLON reason-value *(COMMA reason-value)
+reason-value = protocol *(SEMI reason-params)
+protocol = "SIP" / "Q.850" / "Preemption" / token
+reason-params = protocol-cause / reason-text / reason-extension
+protocol-cause = "cause" EQUAL "cause
+cause = 1*DIGIT
+reason-text = "text" EQUAL quoted-string
+reason-extension = generic-param
+protocol-cause = not-defined
+
+;;;; Record-Route
+Record-Route = "Record-Route" HCOLON rec-route *(COMMA rec-route)
+rec-route = name-addr *( SEMI rr-param )
+rr-param = generic-param
+
+;;;; Refer-Sub
+Refer-Sub = "Refer-Sub" HCOLON refer-sub-value *(SEMI exten)
+refer-sub-value = "true" / "false"
+exten = generic-param
+
+;;;; Refer-To / r
+Refer-To = ( "Refer-To" / "r" ) HCOLON ( name-addr / addr-spec ) *(SEMI refer-param)
+refer-param = generic-param / feature-param
+
+;;;; Referred-By / b
+Referred-By = ( "Referred-By" / "b" ) HCOLON referrer-uri *( SEMI (referredby-id-param / generic-param) )
+
+referrer-uri = ( name-addr / addr-spec )
+referredby-id-param = "cid" EQUAL sip-clean-msg-id
+sip-clean-msg-id = LDQUOT dot-atom "@" (dot-atom / host) RDQUOT
+dot-atom = atom *( "." atom )
+atom = 1*( alphanum / "-" / "!" / "%" / "*" / "_" / "+" / "'" / "`" / "~" )
+
+;;;; Reject-Contact / j
+Reject-Contact = ( "Reject-Contact" / "j" ) HCOLON rc-value *(COMMA rc-value)
+rc-value = "*" *(SEMI rc-params)
+rc-params = feature-param / generic-param
+
+;;;; Replaces
+Replaces = "Replaces" HCOLON callid *(SEMI replaces-param)
+
+replaces-param = to-tag / from-tag / early-flag / generic-param
+to-tag = "to-tag" EQUAL token
+from-tag = "from-tag" EQUAL token
+early-flag = "early-only"
+
+;;;; Reply-To
+Reply-To = "Reply-To" HCOLON rplyto-spec
+
+rplyto-spec = ( name-addr / addr-spec ) *( SEMI rplyto-param )
+rplyto-param = generic-param
+
+;;;; Request-Disposition / d
+Request-Disposition = ( "Request-Disposition" / "d" ) HCOLON directive *(COMMA directive)
+directive = proxy-directive / cancel-directive / fork-directive / recurse-directive / parallel-directive / queue-directive
+proxy-directive = "proxy" / "redirect"
+cancel-directive = "cancel" / "no-cancel"
+fork-directive = "fork" / "no-fork"
+recurse-directive = "recurse" / "no-recurse"
+parallel-directive = "parallel" / "sequential"
+queue-directive = "queue" / "no-queue"
+
+;;;; Require
+Require = "Require" HCOLON option-tag *(COMMA option-tag)
+
+;;;; Resource-Priority
+Resource-Priority = "Resource-Priority" HCOLON r-value *(COMMA r-value)
+r-value = namespace "." r-priority
+namespace = token-nodot
+r-priority = token-nodot
+token-nodot = 1*( alphanum / "-" / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
+
+;;;; Retry-After RFC 3261 Up
+Retry-After = "Retry-After" HCOLON delta-seconds [ comment ] *( SEMI retry-param )
+retry-param = ("duration" EQUAL delta-seconds) / generic-param
+
+;;;; Route
+Route = "Route" HCOLON route-param *(COMMA route-param)
+route-param = name-addr *( SEMI rr-param )
+
+;;;; RSeq
+RSeq = "RSeq" HCOLON response-num
+
+;;;; Security-Client
+Security-Client = "Security-Client" HCOLON sec-mechanism *(COMMA sec-mechanism)
+sec-mechanism = mechanism-name *( SEMI mech-parameters )
+mechanism-name = ( "digest" / "tls" / "ipsec-ike" / "ipsec-man" / token )
+mech-parameters = ( preference / digest-algorithm / digest-qop / digest-verify / mech-extension )
+preference = "q" EQUAL qvalue
+digest-algorithm = "d-alg" EQUAL token
+digest-qop = "d-qop" EQUAL token
+digest-verify = "d-ver" EQUAL LDQUOT 32LHEX RDQUOT
+mech-extension = generic-param
+
+;;;; Security-Server
+Security-Server = "Security-Server" HCOLON sec-mechanism *(COMMA sec-mechanism)
+
+;;;; Security-Verify
+Security-Verify = "Security-Verify" HCOLON sec-mechanism *(COMMA sec-mechanism)
+
+;;;; Server
+Server = "Server" HCOLON server-val *(LWS server-val)
+server-val = product / comment
+product = token [SLASH product-version]
+product-version = token
+
+;;;; Service-Route
+Service-Route = "Service-Route" HCOLON sr-value *(COMMA sr-value)
+sr-value = name-addr *( SEMI rr-param )
+
+;;;; Session-Expires / x
+Session-Expires = ( "Session-Expires" / "x" ) HCOLON delta-seconds *( SEMI (se-params )
+se-params = refresher-param / generic-param
+refresher-param = "refresher" EQUAL ("uas" / "uac")
+
+;;;; SIP-ETag
+SIP-ETag = "SIP-ETag" HCOLON entity-tag
+entity-tag = token
+
+;;;; SIP-If-Match
+SIP-If-Match = "SIP-If-Match" HCOLON entity-tag
+
+;;;; Subject / s
+Subject = ( "Subject" / "s" ) HCOLON [TEXT-UTF8-TRIM]
+
+;;;; Subscription-State
+Subscription-State = ( "Subscription-State" / "o" ) HCOLON substate-value *( SEMI subexp-params )
+substate-value = "active" / "pending" / "terminated" / extension-substate
+extension-substate = token
+subexp-params = ("reason" EQUAL event-reason-value) / ("expires" EQUAL delta-seconds) / ("retry-after" EQUAL delta-seconds) / generic-param
+event-reason-value = "deactivated" / "probation" / "rejected" / "timeout" / "giveup" / "noresource" / event-reason-extension
+event-reason-extension = token
+
+;;;; Supported / k
+Supported = ( "Supported" / "k" ) HCOLON [option-tag *(COMMA option-tag)]
+
+;;;; Target-Dialog
+Target-Dialog = "Target-Dialog" HCOLON callid *(SEMI td-param)
+td-param = remote-param / local-param / generic-param
+remote-param = "remote-tag" EQUAL token
+local-param = "local-tag" EQUAL token
+
+;;;; Timestamp
+Timestamp = "Timestamp" HCOLON 1*(DIGIT) [ "." *(DIGIT) ] [ LWS delay ]
+delay = *(DIGIT) [ "." *(DIGIT) ]
+
+;;;; To / t
+To = ( "To" / "t" ) HCOLON ( name-addr / addr-spec ) *( SEMI to-param )
+to-param = tag-param / generic-param
+
+;;;; Trigger-Consent
+Trigger-Consent = "Trigger-Consent" HCOLON trigger-cons-spec *(COMMA trigger-cons-spec)
+trigger-cons-spec = ( SIP-URI / SIPS-URI ) *( SEMI trigger-param )
+trigger-param = target-uri / generic-param
+target-uri = "target-uri" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
+
+;;;; Unsupported
+Unsupported = "Unsupported" HCOLON option-tag *(COMMA option-tag)
+
+;;;; User-Agent
+User-Agent = "User-Agent" HCOLON server-val *(LWS server-val)
+
+;;;; Via / v
+Via = ( "Via" / "v" ) HCOLON via-parm *(COMMA via-parm)
+via-parm = sent-protocol LWS sent-by *( SEMI via-params )
+via-params = via-ttl / via-maddr / via-received / via-branch / via-compression / response-port / via-extension
+via-ttl = "ttl" EQUAL ttl
+via-maddr = "maddr" EQUAL host
+via-received = "received" EQUAL (IPv4address / IPv6address)
+via-branch = "branch" EQUAL token
+via-compression = "comp" EQUAL ("sigcomp" / other-compression)
+other-compression = token
+response-port = "rport" [EQUAL 1*DIGIT]
+via-extension = generic-param
+sent-protocol = protocol-name SLASH protocol-version SLASH transport
+protocol-name = "SIP" / token
+protocol-version = token
+transport = "UDP" / "TCP" / "TLS" / "SCTP" / "TLS-SCTP" / other-transport
+sent-by = host [ COLON port ]
+ttl = 1*3DIGIT
+
+;;;; Warning
+Warning = "Warning" HCOLON warning-value *(COMMA warning-value)
+warning-value = warn-code SP warn-agent SP warn-text
+warn-code = 3DIGIT
+warn-agent = hostport / pseudonym
+warn-text = quoted-string
+pseudonym = token
+
+;;;; WWW-Authenticate
+WWW-Authenticate = "WWW-Authenticate" HCOLON challenge
+
+;---------------------
+; Response Codes
+;---------------------
+Status-Code = Informational / Success / Redirection / Client-Error / Server-Error / Global-Failure / extension-code
+extension-code = 3DIGIT
+Reason-Phrase = *( reserved / unreserved / escaped / UTF8-NONASCII / UTF8-CONT / SP / HTAB )
+
+;;;; 1xx
+Informational = "100" / "180" / "181" / "182" / "183"
+
+;;;; 2xx
+Success = "200" / "202"
+
+;;;; 3xx
+Redirection = "250" / "301" / "302" / "305" / "380"
+
+;;;; 4xx
+Client-Error = "400" / "401" / "402" / "403" / "404" / "405" / "406" / "407" / "408" / "410" / "412" / "413" / "414" / "415" / "416" / "417" / "420" / "421" / "422" / "423" / "428" / "429" / "433" / "436" / "440" / "437" / "438" / "470" / "480" / "481" / "482" / "483" / "484"/ "485"/ "486"/ "487" / "488"/ "489"/ "491"/ "493" / "494"
+
+;;;; 5xx
+Server-Error = "500" / "501" / "502" / "503" / "504" / "505" / "513" / "580"
+
+;;;; 6xx
+Global-Failure= "600" / "603" / "604" / "606"
+
+
+;---------------------------------------------------------------------------------------------------------
diff --git a/tinySIP/droid-makefile b/tinySIP/droid-makefile
new file mode 100644
index 0000000..d11db7d
--- /dev/null
+++ b/tinySIP/droid-makefile
@@ -0,0 +1,190 @@
+APP := lib$(PROJECT)_$(MARCH).$(EXT)
+
+CFLAGS := $(CFLAGS_LIB) -I../tinySAK/src -I../tinyNET/src -I../tinyHTTP/include -I../tinyIPSec/src -I../tinySIGCOMP/src -I../tinySDP/include -I../tinyMEDIA/include -I./include
+LDFLAGS := $(LDFLAGS_LIB) -ltinySAK_$(MARCH) -ltinyNET_$(MARCH) -ltinyHTTP_$(MARCH) -ltinyIPSec_$(MARCH) -ltinySDP_$(MARCH) -ltinyMEDIA_$(MARCH) -ltinySIGCOMP_$(MARCH)
+
+all: $(APP)
+
+OBJS = \
+ src/tsip.o\
+ src/tsip_action.o\
+ src/tsip_event.o\
+ src/tsip_message.o\
+ src/tsip_ssession.o\
+ src/tsip_timers.o\
+ src/tsip_uri.o\
+
+ ### api
+OBJS += src/api/tsip_api_common.o\
+ src/api/tsip_api_info.o\
+ src/api/tsip_api_invite.o\
+ src/api/tsip_api_message.o\
+ src/api/tsip_api_options.o\
+ src/api/tsip_api_publish.o\
+ src/api/tsip_api_register.o\
+ src/api/tsip_api_subscribe.o
+
+ ### authentication
+OBJS += src/authentication/tsip_challenge.o\
+ src/authentication/tsip_milenage.o\
+ src/authentication/tsip_rijndael.o
+
+ ### dialogs
+OBJS += src/dialogs/tsip_dialog.o\
+ src/dialogs/tsip_dialog_info.o\
+ src/dialogs/tsip_dialog_invite.o\
+ src/dialogs/tsip_dialog_invite.cdiv.o\
+ src/dialogs/tsip_dialog_invite.client.o\
+ src/dialogs/tsip_dialog_invite.conf.o\
+ src/dialogs/tsip_dialog_invite.ect.o\
+ src/dialogs/tsip_dialog_invite.hold.o\
+ src/dialogs/tsip_dialog_invite.ice.o\
+ src/dialogs/tsip_dialog_invite.qos.o\
+ src/dialogs/tsip_dialog_invite.server.o\
+ src/dialogs/tsip_dialog_invite.timers.o\
+ src/dialogs/tsip_dialog_layer.o\
+ src/dialogs/tsip_dialog_message.o\
+ src/dialogs/tsip_dialog_options.o\
+ src/dialogs/tsip_dialog_publish.client.o\
+ src/dialogs/tsip_dialog_register.o\
+ src/dialogs/tsip_dialog_register.client.o\
+ src/dialogs/tsip_dialog_register.server.o\
+ src/dialogs/tsip_dialog_subscribe.client.o\
+ src/dialogs/tsip_dialog_subscribe.server.o
+
+ ### headers
+OBJS += src/headers/tsip_header.o\
+ src/headers/tsip_header_accept.o\
+ src/headers/tsip_header_Accept_Contact.o\
+ src/headers/tsip_header_Accept_Encoding.o\
+ src/headers/tsip_header_Accept_Language.o\
+ src/headers/tsip_header_Accept_Resource_Priority.o\
+ src/headers/tsip_header_Alert_Info.o\
+ src/headers/tsip_header_Allow.o\
+ src/headers/tsip_header_Allow_Events.o\
+ src/headers/tsip_header_Authentication_Info.o\
+ src/headers/tsip_header_Authorization.o\
+ src/headers/tsip_header_Call_ID.o\
+ src/headers/tsip_header_Call_Info.o\
+ src/headers/tsip_header_Contact.o\
+ src/headers/tsip_header_Content_Disposition.o\
+ src/headers/tsip_header_Content_Encoding.o\
+ src/headers/tsip_header_Content_Language.o\
+ src/headers/tsip_header_Content_Length.o\
+ src/headers/tsip_header_Content_Type.o\
+ src/headers/tsip_header_CSeq.o\
+ src/headers/tsip_header_Date.o\
+ src/headers/tsip_header_Dummy.o\
+ src/headers/tsip_header_Error_Info.o\
+ src/headers/tsip_header_Event.o\
+ src/headers/tsip_header_Expires.o\
+ src/headers/tsip_header_From.o\
+ src/headers/tsip_header_History_Info.o\
+ src/headers/tsip_header_Identity.o\
+ src/headers/tsip_header_Identity_Info.o\
+ src/headers/tsip_header_In_Reply_To.o\
+ src/headers/tsip_header_Join.o\
+ src/headers/tsip_header_Max_Forwards.o\
+ src/headers/tsip_header_MIME_Version.o\
+ src/headers/tsip_header_Min_Expires.o\
+ src/headers/tsip_header_Min_SE.o\
+ src/headers/tsip_header_Organization.o\
+ src/headers/tsip_header_Path.o\
+ src/headers/tsip_header_Priority.o\
+ src/headers/tsip_header_Privacy.o\
+ src/headers/tsip_header_Proxy_Authenticate.o\
+ src/headers/tsip_header_Proxy_Authorization.o\
+ src/headers/tsip_header_Proxy_Require.o\
+ src/headers/tsip_header_P_Access_Network_Info.o\
+ src/headers/tsip_header_P_Answer_State.o\
+ src/headers/tsip_header_P_Asserted_Identity.o\
+ src/headers/tsip_header_P_Associated_URI.o\
+ src/headers/tsip_header_P_Called_Party_ID.o\
+ src/headers/tsip_header_P_Charging_Function_Addresses.o\
+ src/headers/tsip_header_P_Charging_Vector.o\
+ src/headers/tsip_header_P_DCS_Billing_Info.o\
+ src/headers/tsip_header_P_DCS_LAES.o\
+ src/headers/tsip_header_P_DCS_OSPS.o\
+ src/headers/tsip_header_P_DCS_Redirect.o\
+ src/headers/tsip_header_P_DCS_Trace_Party_ID.o\
+ src/headers/tsip_header_P_Early_Media.o\
+ src/headers/tsip_header_P_Media_Authorization.o\
+ src/headers/tsip_header_P_Preferred_Identity.o\
+ src/headers/tsip_header_P_Profile_Key.o\
+ src/headers/tsip_header_P_User_Database.o\
+ src/headers/tsip_header_P_Visited_Network_ID.o\
+ src/headers/tsip_header_RAck.o\
+ src/headers/tsip_header_Reason.o\
+ src/headers/tsip_header_Record_Route.o\
+ src/headers/tsip_header_Referred_By.o\
+ src/headers/tsip_header_Refer_Sub.o\
+ src/headers/tsip_header_Refer_To.o\
+ src/headers/tsip_header_Reject_Contact.o\
+ src/headers/tsip_header_Replaces.o\
+ src/headers/tsip_header_Reply_To.o\
+ src/headers/tsip_header_Request_Disposition.o\
+ src/headers/tsip_header_Require.o\
+ src/headers/tsip_header_Resource_Priority.o\
+ src/headers/tsip_header_Retry_After.o\
+ src/headers/tsip_header_Route.o\
+ src/headers/tsip_header_RSeq.o\
+ src/headers/tsip_header_Security_Client.o\
+ src/headers/tsip_header_Security_Server.o\
+ src/headers/tsip_header_Security_Verify.o\
+ src/headers/tsip_header_Server.o\
+ src/headers/tsip_header_Service_Route.o\
+ src/headers/tsip_header_Session_Expires.o\
+ src/headers/tsip_header_SIP_ETag.o\
+ src/headers/tsip_header_SIP_If_Match.o\
+ src/headers/tsip_header_Subject.o\
+ src/headers/tsip_header_Subscription_State.o\
+ src/headers/tsip_header_Supported.o\
+ src/headers/tsip_header_Target_Dialog.o\
+ src/headers/tsip_header_Timestamp.o\
+ src/headers/tsip_header_To.o\
+ src/headers/tsip_header_Unsupported.o\
+ src/headers/tsip_header_User_Agent.o\
+ src/headers/tsip_header_Via.o\
+ src/headers/tsip_header_Warning.o\
+ src/headers/tsip_header_WWW_Authenticate.o
+
+ ### parsers
+OBJS += src/parsers/tsip_parser_header.o\
+ src/parsers/tsip_parser_message.o\
+ src/parsers/tsip_parser_uri.o
+
+ ### parsers
+OBJS += src/sigcomp/tsip_sigcomp.o
+
+ ### transactions
+OBJS += src/transactions/tsip_transac.o\
+ src/transactions/tsip_transac_ict.o\
+ src/transactions/tsip_transac_ist.o\
+ src/transactions/tsip_transac_layer.o\
+ src/transactions/tsip_transac_nict.o\
+ src/transactions/tsip_transac_nist.o
+
+ ### transports
+OBJS += src/transports/tsip_transport.o\
+ src/transports/tsip_transport_ipsec.o\
+ src/transports/tsip_transport_layer.o\
+ src/transports/tsip_transport_tls.o
+
+
+$(APP): $(OBJS)
+ifeq ($(EXT), a)
+ $(AR) rcs $@ $^
+else
+ $(CC) $(LDFLAGS) -o $@ $^
+endif
+
+%.o: %.c
+ $(CC) -c $(INCLUDE) $(CFLAGS) $< -o $@
+
+install: $(APP)
+ $(ANDROID_SDK_ROOT)/tools/adb remount
+ $(ANDROID_SDK_ROOT)/tools/adb push $(APP) $(LIB_DIR)/$(APP)
+ $(ANDROID_SDK_ROOT)/tools/adb shell chmod 777 $(LIB_DIR)/$(APP)
+
+clean:
+ @rm -f $(OBJS) $(APP) \ No newline at end of file
diff --git a/tinySIP/footer.html b/tinySIP/footer.html
new file mode 100644
index 0000000..34ae41e
--- /dev/null
+++ b/tinySIP/footer.html
@@ -0,0 +1,7 @@
+<html>
+<head></head>
+<body>
+<hr>
+<b>doubango project - tinySIP 1.0</b> - Copyright (C) 2009-2010 Mamadou DIOP. All rights reserved. Licensed under the terms of the GNU General Public License v3.
+</body>
+</html> \ No newline at end of file
diff --git a/tinySIP/header.html b/tinySIP/header.html
new file mode 100644
index 0000000..fc921e7
--- /dev/null
+++ b/tinySIP/header.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>doubango - tinySIP</title>
+ <link rel="stylesheet" href="http://www.doubango.org/css.css" type="text/css" />
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <meta name="Keywords" content="doubango, 3GPP IMS/LTE framework, open source, SIP, RFC 3261, 3GPP TS 24.229, VoIP, MMTel, IPTV, 4G, LTE, XCAP, MSRP, IPSec, SigComp, One Voice " />
+ <meta name="Description" content="cross-platform and open source 3GPP IMS/LTE framework for embedded devices such as Android, Symbian, iPhone, Windows Mobile or uLinux." />
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+
+<style type="text/css">
+/*<![CDATA[*/
+ p.c1 {text-align: center;}
+/*]]>*/
+</style>
+</head>
+
+<body>
+ <div id="left">
+ <div id="border">
+ <div id="logo">
+ <p class="companyname">
+ tinySIP</p>
+ </div>
+ <div id="menu">
+ <a href="/index.html" title="Homepage">Home</a> <a href="/gettingstarted.html" title="Getting Started">
+ Getting Started</a> <a href="http://code.google.com/p/doubango/source/checkout" title="Source Code"
+ target="_blank">Source Code</a> <a href="/apiref.html" title="API Reference">API Reference</a> <a href="contact.html" title="Contact">
+ Contact</a>
+ </div>
+ </div>
+ </div>
+</body>
+</html>
+
diff --git a/tinySIP/include/tinysip.h b/tinySIP/include/tinysip.h
new file mode 100644
index 0000000..bf666dc
--- /dev/null
+++ b/tinySIP/include/tinysip.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tinysip.h
+ * @brief SIP (RFC 3261) and 3GPP IMS/LTE (TS 24.229) API.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TINYSIP_H
+#define TINYSIP_TINYSIP_H
+
+/* === tinySAK === */
+#include "tsk.h"
+
+/* === tinyNET === */
+#include "tinynet.h"
+
+/* === tinyMEDIA === */
+#include "tinymedia.h"
+
+/* === tinySDP === */
+#include "tinysdp.h"
+
+/* === tinySIP === */
+#include "tsip.h"
+
+#include "tinysip/parsers/tsip_parser_uri.h"
+#include "tinysip/parsers/tsip_parser_header.h"
+#include "tinysip/parsers/tsip_parser_message.h"
+
+#include "tinysip/tsip_ssession.h"
+#include "tinysip/tsip_action.h"
+
+#include "tinysip/tsip_message.h"
+
+#include "tinysip/headers/tsip_headers.h"
+
+#include "tinysip/api/tsip_api_common.h"
+#include "tinysip/api/tsip_api_invite.h"
+#include "tinysip/api/tsip_api_message.h"
+#include "tinysip/api/tsip_api_info.h"
+#include "tinysip/api/tsip_api_options.h"
+#include "tinysip/api/tsip_api_publish.h"
+#include "tinysip/api/tsip_api_register.h"
+#include "tinysip/api/tsip_api_subscribe.h"
+
+#endif /* TINYSIP_TINYSIP_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_common.h b/tinySIP/include/tinysip/api/tsip_api_common.h
new file mode 100644
index 0000000..1f91f66
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_common.h
@@ -0,0 +1,52 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_common.h
+ * @brief Public common functions.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_COMMON_H
+#define TINYSIP_TSIP_COMMON_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_ssession.h"
+
+TSIP_BEGIN_DECLS
+
+TINYSIP_API int tsip_api_common_reject(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_common_hangup(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_common_accept(const tsip_ssession_handle_t *ss, ...);
+
+
+#if 1 // Backward Compatibility
+# define tsip_action_REJECT tsip_api_common_reject
+# define tsip_action_HANGUP tsip_api_common_hangup
+# define tsip_action_ACCEPT tsip_api_common_accept
+#endif
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_COMMON_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_info.h b/tinySIP/include/tinysip/api/tsip_api_info.h
new file mode 100644
index 0000000..5c7f08e
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_info.h
@@ -0,0 +1,65 @@
+/* Copyright (C) 2011 Doubango Telecom <http://www.doubango.org>
+* Copyright (C) 2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango(dot)org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_info.h
+ * @brief Public info (INFO) functions.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango(dot)org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_INFO_H
+#define TINYSIP_TSIP_INFO_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_event.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_INFO_EVENT(self) ((tsip_info_event_t*)(self))
+
+//@rinyWRAP
+typedef enum tsip_info_event_type_e
+{
+ tsip_i_info,
+ tsip_ao_info,
+}
+tsip_info_event_type_t;
+
+typedef struct tsip_info_event_e
+{
+ TSIP_DECLARE_EVENT;
+
+ tsip_info_event_type_t type;
+}
+tsip_info_event_t;
+
+int tsip_info_event_signal(tsip_info_event_type_t type, tsip_ssession_handle_t* ss, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
+
+TINYSIP_API int tsip_api_info_send_info(const tsip_ssession_handle_t *ss, ...);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_info_event_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_INFO_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_invite.h b/tinySIP/include/tinysip/api/tsip_api_invite.h
new file mode 100644
index 0000000..7fa5b01
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_invite.h
@@ -0,0 +1,131 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_invite.h
+ * @brief Public messaging (INVITE) functions.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_INVITE_H
+#define TINYSIP_TSIP_INVITE_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_event.h"
+
+#include "tinymedia/tmedia_common.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_INVITE_EVENT(self) ((tsip_invite_event_t*)(self))
+
+//@tinyWRAP
+typedef enum tsip_invite_event_type_e
+{
+ // ============================
+ // Sip Events
+ //
+ tsip_i_newcall,
+
+ //! in-dialog requests/reponses
+ tsip_i_request,
+ tsip_ao_request,
+
+ /* 3GPP TS 24.629: Explicit Call Transfer (ECT) */
+ tsip_o_ect_trying,
+ tsip_o_ect_accepted,
+ tsip_o_ect_completed,
+ tsip_o_ect_failed,
+ tsip_o_ect_notify,
+ tsip_i_ect_requested,
+ tsip_i_ect_newcall,
+ tsip_i_ect_completed,
+ tsip_i_ect_failed,
+ tsip_i_ect_notify,
+
+ // ============================
+ // Media Events
+ //
+
+ tsip_m_early_media,
+ tsip_m_updating, // Trying to update from Audio -> Video for example
+ tsip_m_updated, // succeed to update
+
+ /* 3GPP TS 24.610: Communication Hold */
+ tsip_m_local_hold_ok,
+ tsip_m_local_hold_nok,
+ tsip_m_local_resume_ok,
+ tsip_m_local_resume_nok,
+ tsip_m_remote_hold,
+ tsip_m_remote_resume,
+}
+tsip_invite_event_type_t;
+
+typedef struct tsip_invite_event_e
+{
+ TSIP_DECLARE_EVENT;
+
+ tsip_invite_event_type_t type;
+
+ struct{
+ unsigned toto:1;
+ } av;
+
+ /*struct{
+ char* dir;
+ } msrp;*/
+}
+tsip_invite_event_t;
+
+int tsip_invite_event_signal(tsip_invite_event_type_t type, tsip_ssession_handle_t* ss, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
+
+TINYSIP_API int tsip_api_invite_send_invite(const tsip_ssession_handle_t *ss, tmedia_type_t type, ...);
+TINYSIP_API int tsip_api_invite_send_info(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_invite_send_hold(const tsip_ssession_handle_t *ss, tmedia_type_t type, ...);
+TINYSIP_API int tsip_api_invite_send_resume(const tsip_ssession_handle_t *ss, tmedia_type_t type, ...);
+TINYSIP_API int tsip_api_invite_send_large_message(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_invite_send_ect(const tsip_ssession_handle_t *ss, const char* toUri, ...);
+TINYSIP_API int tsip_api_invite_send_ect_accept(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_invite_send_ect_reject(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_invite_send_sos(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_invite_send_dtmf(const tsip_ssession_handle_t *ss, int event, ...);
+TINYSIP_API int tsip_api_invite_send_bye(const tsip_ssession_handle_t *ss, ...);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_invite_event_def_t;
+
+#if 1 // Backward Compatibility
+# define tsip_action_INVITE tsip_api_invite_send_invite
+# define tsip_action_HOLD tsip_api_invite_send_hold
+# define tsip_action_RESUME tsip_api_invite_send_resume
+# define tsip_action_LARGE_MESSAGE tsip_api_invite_send_large_message
+# define tsip_action_ECT tsip_api_invite_send_ect
+# define tsip_action_SOS tsip_api_invite_send_sos
+# define tsip_action_DTMF tsip_api_invite_send_dtmf
+# define tsip_action_BYE tsip_api_invite_send_bye
+#endif
+
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_INVITE_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_message.h b/tinySIP/include/tinysip/api/tsip_api_message.h
new file mode 100644
index 0000000..e52c914
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_message.h
@@ -0,0 +1,69 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_message.h
+ * @brief Public messaging (MESSAGE) functions.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_MESSAGE_H
+#define TINYSIP_TSIP_MESSAGE_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_event.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_MESSAGE_EVENT(self) ((tsip_message_event_t*)(self))
+
+//@tinyWRAP
+typedef enum tsip_message_event_type_e
+{
+ tsip_i_message,
+ tsip_ao_message,
+}
+tsip_message_event_type_t;
+
+typedef struct tsip_message_event_e
+{
+ TSIP_DECLARE_EVENT;
+
+ tsip_message_event_type_t type;
+}
+tsip_message_event_t;
+
+int tsip_message_event_signal(tsip_message_event_type_t type, tsip_ssession_handle_t* ss, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
+
+TINYSIP_API int tsip_api_message_send_message(const tsip_ssession_handle_t *ss, ...);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_message_event_def_t;
+
+#if 1 // Backward Compatibility
+# define tsip_action_MESSAGE tsip_api_message_send_message
+#endif
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_MESSAGE_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_options.h b/tinySIP/include/tinysip/api/tsip_api_options.h
new file mode 100644
index 0000000..1f62211
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_options.h
@@ -0,0 +1,71 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_options.h
+ * @brief Public functions to handle OPTIONS.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_OPTIONS_H
+#define TINYSIP_TSIP_OPTIONS_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_event.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_OPTIONS_EVENT(self) ((tsip_options_event_t*)(self))
+
+//@tinyWRAP
+typedef enum tsip_options_event_type_e
+{
+ tsip_i_options,
+ tsip_ao_options,
+}
+tsip_options_event_type_t;
+
+/**< Event from SIP OPTIONS dialog */
+typedef struct tsip_options_event_e
+{
+ TSIP_DECLARE_EVENT;
+
+ //! the type of the event
+ tsip_options_event_type_t type;
+}
+tsip_options_event_t;
+
+int tsip_options_event_signal(tsip_options_event_type_t type, tsip_ssession_handle_t* ss, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
+
+TINYSIP_API int tsip_api_options_send_options(const tsip_ssession_handle_t *ss, ...);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_options_event_def_t;
+
+#if 1 // Backward Compatibility
+# define tsip_action_OPTIONS tsip_api_options_send_options
+#endif
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_OPTIONS_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_publish.h b/tinySIP/include/tinysip/api/tsip_api_publish.h
new file mode 100644
index 0000000..c37f239
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_publish.h
@@ -0,0 +1,74 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_publish.h
+ * @brief Public piblication (PUBLISH) functions.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_PUBLISH_H
+#define TINYSIP_TSIP_PUBLISH_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_event.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_PUBLISH_EVENT(self) ((tsip_publish_event_t*)(self))
+
+//@tinyWRAP
+typedef enum tsip_publish_event_type_e
+{
+ tsip_i_publish,
+ tsip_ao_publish,
+
+ tsip_i_unpublish,
+ tsip_ao_unpublish
+}
+tsip_publish_event_type_t;
+
+typedef struct tsip_publish_event_e
+{
+ TSIP_DECLARE_EVENT;
+
+ tsip_publish_event_type_t type;
+}
+tsip_publish_event_t;
+
+int tsip_publish_event_signal(tsip_publish_event_type_t type, tsip_ssession_handle_t* ss, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
+
+TINYSIP_API int tsip_api_publish_send_publish(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_publish_send_unpublish(const tsip_ssession_handle_t *ss, ...);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_publish_event_def_t;
+
+#if 1 // Backward Compatibility
+# define tsip_action_PUBLISH tsip_api_publish_send_publish
+# define tsip_action_UNPUBLISH tsip_api_publish_send_unpublish
+#endif
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_PUBLISH_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_register.h b/tinySIP/include/tinysip/api/tsip_api_register.h
new file mode 100644
index 0000000..d116006
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_register.h
@@ -0,0 +1,76 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_register.h
+ * @brief Public registration (REGISTER) functions.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_REGISTER_H
+#define TINYSIP_TSIP_REGISTER_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_event.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_REGISTER_EVENT(self) ((tsip_register_event_t*)(self))
+
+//@tinyWRAP
+typedef enum tsip_register_event_type_e
+{
+ tsip_i_newreg,
+
+ tsip_i_register, // refresh
+ tsip_ao_register,
+
+ tsip_i_unregister,
+ tsip_ao_unregister,
+}
+tsip_register_event_type_t;
+
+typedef struct tsip_register_event_e
+{
+ TSIP_DECLARE_EVENT;
+
+ tsip_register_event_type_t type;
+}
+tsip_register_event_t;
+
+int tsip_register_event_signal(tsip_register_event_type_t type, tsip_ssession_t* ss, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
+
+TINYSIP_API int tsip_api_register_send_register(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_register_send_unregister(const tsip_ssession_handle_t *ss, ...);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_register_event_def_t;
+
+#if 1 // Backward Compatibility
+# define tsip_action_REGISTER tsip_api_register_send_register
+# define tsip_action_UNREGISTER tsip_api_register_send_unregister
+#endif
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_REGISTER_H */
diff --git a/tinySIP/include/tinysip/api/tsip_api_subscribe.h b/tinySIP/include/tinysip/api/tsip_api_subscribe.h
new file mode 100644
index 0000000..da7f8c9
--- /dev/null
+++ b/tinySIP/include/tinysip/api/tsip_api_subscribe.h
@@ -0,0 +1,77 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_api_subscribe.h
+ * @brief Public subscription (SUBSCRIBE) functions.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_SUBSCRIBE_H
+#define TINYSIP_TSIP_SUBSCRIBE_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_event.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_SUBSCRIBE_EVENT(self) ((tsip_subscribe_event_t*)(self))
+
+//@tinyWRAP
+typedef enum tsip_subscribe_event_type_e
+{
+ tsip_i_subscribe,
+ tsip_ao_subscribe,
+
+ tsip_i_unsubscribe,
+ tsip_ao_unsubscribe,
+
+ tsip_i_notify,
+ tsip_ao_notify
+}
+tsip_subscribe_event_type_t;
+
+typedef struct tsip_subscribe_event_e
+{
+ TSIP_DECLARE_EVENT;
+
+ tsip_subscribe_event_type_t type;
+}
+tsip_subscribe_event_t;
+
+int tsip_subscribe_event_signal(tsip_subscribe_event_type_t type, tsip_ssession_t* ss, short status_code, const char *phrase, const struct tsip_message_s* sipmessage);
+
+TINYSIP_API int tsip_api_subscribe_send_subscribe(const tsip_ssession_handle_t *ss, ...);
+TINYSIP_API int tsip_api_subscribe_send_unsubscribe(const tsip_ssession_handle_t *ss, ...);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_subscribe_event_def_t;
+
+#if 1 // Backward Compatibility
+# define tsip_action_SUBSCRIBE tsip_api_subscribe_send_subscribe
+# define tsip_action_UNSUBSCRIBE tsip_api_subscribe_send_unsubscribe
+#endif
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_SUBSCRIBE_H */
diff --git a/tinySIP/include/tinysip/authentication/tsip_challenge.h b/tinySIP/include/tinysip/authentication/tsip_challenge.h
new file mode 100644
index 0000000..38f7690
--- /dev/null
+++ b/tinySIP/include/tinysip/authentication/tsip_challenge.h
@@ -0,0 +1,92 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_challenge.h
+ * @brief SIP authentication challenge.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_AUTHENTICATION_CHALLENGE_H
+#define TINYSIP_AUTHENTICATION_CHALLENGE_H
+
+#include "tinysip_config.h"
+
+#include "tsip.h"
+
+#include "tinysip/tsip_message.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/authentication/tsip_milenage.h"
+
+#include "tinyhttp/auth/thttp_auth.h"
+
+#include "tsk_object.h"
+#include "tsk_list.h"
+#include "tsk_md5.h"
+
+TSIP_BEGIN_DECLS
+
+
+typedef struct tsip_challenge_s
+{
+ TSK_DECLARE_OBJECT;
+
+ const tsip_stack_handle_t *stack;
+
+ tsk_bool_t isproxy;
+
+ char* username;
+ char* scheme;
+ char* realm;
+ char* nonce;
+ char* opaque;
+ char* algorithm;
+ const char* qop;
+
+ char* ha1_hexstr;
+
+ AKA_CK_T ck;
+ AKA_IK_T ik;
+
+ tsk_md5string_t cnonce;
+ unsigned nc;
+}
+tsip_challenge_t;
+
+typedef tsk_list_t tsip_challenges_L_t;
+
+TINYSIP_API tsip_challenge_t* tsip_challenge_create(tsip_stack_t* stack, tsk_bool_t isproxy, const char* scheme, const char* realm, const char* nonce, const char* opaque, const char* algorithm, const char* qop);
+tsip_challenge_t* tsip_challenge_create_null(tsip_stack_t* stack);
+
+int tsip_challenge_set_cred(tsip_challenge_t *self, const char* username, const char* ha1_hexstr);
+int tsip_challenge_update(tsip_challenge_t *self, const char* scheme, const char* realm, const char* nonce, const char* opaque, const char* algorithm, const char* qop);
+TINYSIP_API tsip_header_t *tsip_challenge_create_header_authorization(tsip_challenge_t *self, const tsip_request_t *request);
+tsip_header_t *tsip_challenge_create_empty_header_authorization(const char* username, const char* realm, const char* uristring);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_challenge_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_AUTHENTICATION_CHALLENGE_H */
+
diff --git a/tinySIP/include/tinysip/authentication/tsip_milenage.h b/tinySIP/include/tinysip/authentication/tsip_milenage.h
new file mode 100644
index 0000000..dbf72de
--- /dev/null
+++ b/tinySIP/include/tinysip/authentication/tsip_milenage.h
@@ -0,0 +1,189 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_milenage.h
+ * @brief 3GPP authentication and key agreement functions f1, f1*, f2, f3, f4, f5 and f5*.
+ *
+ * @section DESCRIPTION
+ *
+ * @sa 3G Security
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35205.htm"> 3GPP TS 35.205 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35206.htm"> 3GPP TS 35.206 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35207.htm"> 3GPP TS 35.207 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35208.htm"> 3GPP TS 35.208 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35909.htm"> 3GPP TS 35.909 </a>
+ *-------------------------------------------------------------------
+ * Example algorithms f1, f1*, f2, f3, f4, f5, f5*
+ *-------------------------------------------------------------------
+ *
+ * A sample implementation of the example 3GPP authentication and
+ * key agreement functions f1, f1*, f2, f3, f4, f5 and f5*. This is
+ * a byte-oriented implementation of the functions, and of the block
+ * cipher kernel function Rijndael.
+ *
+ * This has been coded for clarity, not necessarily for efficiency.
+ *
+ * The functions f2, f3, f4 and f5 share the same inputs and have
+ * been coded together as a single function. f1, f1* and f5* are
+ * all coded separately.
+ *
+ *-----------------------------------------------------------------
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+
+#ifndef TINYSIP_AUTHENTICATION_MILENAGE_H
+#define TINYSIP_AUTHENTICATION_MILENAGE_H
+
+#include "tinysip_config.h"
+
+/**@def AKA_AK_SIZE
+ * a 48-bit anonymity key that is the output of either of the functions f5 and f5*.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+
+TSIP_BEGIN_DECLS
+
+#define AKA_AK_SIZE 6
+typedef uint8_t AKA_AK_T[AKA_AK_SIZE + 1];
+
+/**@def AKA_AMF_SIZE
+ * 16-bit authentication management field that is an input to the functions f1 and f1*.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_AMF_SIZE 2
+typedef uint8_t AKA_AMF_T[AKA_AMF_SIZE + 1];
+
+/**@def AKA_CK_SIZE
+ * a 128-bit confidentiality key that is the output of the function f3.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_CK_SIZE 16
+typedef uint8_t AKA_CK_T[AKA_CK_SIZE + 1];
+
+/**@def AKA_IK_SIZE
+ * a 128-bit integrity key that is the output of the function f4.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_IK_SIZE 16
+typedef uint8_t AKA_IK_T[AKA_IK_SIZE + 1];
+
+/**@def AKA_K_SIZE
+ * a 128-bit subscriber key that is an input to the functions f1, f1*, f2, f3, f4, f5 and f5*.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_K_SIZE 16
+typedef uint8_t AKA_K_T[AKA_K_SIZE + 1];
+
+/**@def AKA_MAC_A_SIZE
+ * a 64-bit network authentication code that is the output of the function f1.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_MAC_A_SIZE 8
+typedef uint8_t AKA_MAC_A_T[AKA_MAC_A_SIZE + 1];
+
+/**@def AKA_MAC_S_SIZE
+ * a 64-bit network authentication code that is the output of the function f1*.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_MAC_S_SIZE 8
+typedef uint8_t AKA_MAC_S_T[AKA_MAC_S_SIZE + 1];
+
+/**@def AKA_OP_SIZE
+ * a 128-bit Operator Variant Algorithm Configuration Field that is a component of the functions f1, f1*, f2, f3, f4, f5 and f5*.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_OP_SIZE 16
+typedef uint8_t AKA_OP_T[AKA_OP_SIZE + 1];
+
+/**@def AKA_OPC_SIZE
+ * a 128-bit value derived from OP and K and used within the computation of the functions.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_OPC_SIZE 16
+typedef uint8_t AKA_OPC_T[AKA_OPC_SIZE + 1];
+
+/**@def AKA_RAND_SIZE
+ * a 128-bit random challenge that is an input to the functions f1, f1*, f2, f3, f4, f5 and f5*.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_RAND_SIZE 16
+typedef uint8_t AKA_RAND_T[AKA_RAND_SIZE + 1];
+
+/**@def AKA_RES_SIZE
+ * a 64-bit signed response that is the output of the function f2.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_RES_SIZE 8
+typedef uint8_t AKA_RES_T[AKA_RES_SIZE + 1];
+
+/**@def AKA_SQN_SIZE
+ * a 48-bit sequence number that is an input to either of the functions f1 and f1*. (For f1* this input is more precisely called SQNMS.)
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_SQN_SIZE 6
+typedef uint8_t AKA_SQN_T[AKA_SQN_SIZE + 1];
+
+/**@def AKA_TEMP_SIZE
+ * a 128-bit value used within the computation of the functions.
+ * Defined in 3GPP TS 35.206 subclause 2.3.
+ */
+#define AKA_TEMP_SIZE 16
+typedef uint8_t AKA_TEMP_T[AKA_TEMP_SIZE + 1];
+
+/**@def AKA_AUTS_SIZE
+* Authentication Token. A 112 bit value generated by the client
+ upon experiencing an SQN synchronization failure.
+* Defined in RFC 3310 subclause 3.4
+*/
+#define AKA_AUTS_SIZE 14
+typedef uint8_t AKA_AUTS_T[AKA_AUTS_SIZE + 1];
+
+/**@def AKA_AUTN_SIZE
+* Authentication Token. A 128 bit value generated by the AuC, which
+ together with the RAND parameter authenticates the server to the client.
+* Defined in RFC 3310 subclause 3.4
+*/
+#define AKA_AUTN_SIZE 16
+typedef uint8_t AKA_AUTN_T[AKA_AUTN_SIZE + 1];
+
+#define AKA_XXX_DECLARE(name) AKA_##name##_T name
+#define AKA_XXX_BZERO(name) memset(name, '\0', AKA_##name##_SIZE + 1)
+
+void f1 ( uint8_t k[16], uint8_t rand[16], uint8_t sqn[6], uint8_t amf[2],
+ uint8_t mac_a[8] );
+void f2345 ( uint8_t k[16], uint8_t rand[16],
+ uint8_t res[8], uint8_t ck[16], uint8_t ik[16], uint8_t ak[6] );
+void f1star( uint8_t k[16], uint8_t rand[16], uint8_t sqn[6], uint8_t amf[2],
+ uint8_t mac_s[8] );
+void f5star( uint8_t k[16], uint8_t rand[16],
+ uint8_t ak[6] );
+void ComputeOPc( uint8_t op_c[16] );
+void ComputeOP( uint8_t op[16] );
+
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_AUTHENTICATION_MILENAGE_H */
+
diff --git a/tinySIP/include/tinysip/authentication/tsip_rijndael.h b/tinySIP/include/tinysip/authentication/tsip_rijndael.h
new file mode 100644
index 0000000..18efe3a
--- /dev/null
+++ b/tinySIP/include/tinysip/authentication/tsip_rijndael.h
@@ -0,0 +1,71 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_rijndael.h
+ * @brief Rijndael Implementation.
+ *
+
+ * @section DESCRIPTION
+ *
+ * @sa 3G Security
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35205.htm"> 3GPP TS 35.205 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35206.htm"> 3GPP TS 35.206 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35207.htm"> 3GPP TS 35.207 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35208.htm"> 3GPP TS 35.208 </a>
+ * <a href="http://www.3gpp.org/ftp/Specs/html-info/35909.htm"> 3GPP TS 35.909 </a>
+ *-------------------------------------------------------------------
+ * Rijndael Implementation
+ *-------------------------------------------------------------------
+ *
+ * A sample 32-bit orientated implementation of Rijndael, the
+ * suggested kernel for the example 3GPP authentication and key
+ * agreement functions.
+ *
+ * This implementation draws on the description in section 5.2 of
+ * the AES proposal and also on the implementation by
+ * Dr B. R. Gladman <brg@gladman.uk.net> 9th October 2000.
+ * It uses a number of large (4k) lookup tables to implement the
+ * algorithm in an efficient manner.
+ *
+ * Note: in this implementation the State is stored in four 32-bit
+ * words, one per column of the State, with the top byte of the
+ * column being the _least_ significant byte of the word.
+ *
+ *-----------------------------------------------------------------
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_AUTHENTICATION_RIJNDAEL_H
+#define TINYSIP_AUTHENTICATION_RIJNDAEL_H
+
+#include "tinysip_config.h"
+
+TSIP_BEGIN_DECLS
+
+void RijndaelKeySchedule( uint8_t key[16] );
+void RijndaelEncrypt( uint8_t in[16], uint8_t out[16] );
+
+TSIP_END_DECLS
+
+#endif /*TINYSIP_AUTHENTICATION_RIJNDAEL_H*/
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog.h b/tinySIP/include/tinysip/dialogs/tsip_dialog.h
new file mode 100644
index 0000000..e6280b9
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog.h
@@ -0,0 +1,208 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog.h
+ * @brief SIP dialog base class as per RFC 3261 subclause 17.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_H
+#define TINYSIP_DIALOG_H
+
+#include "tinysip_config.h"
+
+#include "tsip.h"
+#include "tinysip/tsip_uri.h"
+#include "tinysip/tsip_timers.h"
+#include "tinysip/tsip_message.h"
+#include "tinysip/tsip_ssession.h"
+
+#include "tinysip/authentication/tsip_challenge.h"
+#include "tinysip/tsip_action.h"
+
+#include "tinysip/headers/tsip_header_Record_Route.h"
+
+#include "tsk_safeobj.h"
+#include "tsk_list.h"
+#include "tsk_string.h"
+#include "tsk_fsm.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_DIALOG(self) ((tsip_dialog_t*)(self))
+#define TSIP_DIALOG_GET_STATE(self) TSIP_DIALOG((self))->state
+#define TSIP_DIALOG_GET_FSM(self) TSIP_DIALOG((self))->fsm
+#define TSIP_DIALOG_GET_SS(self) TSIP_DIALOG((self))->ss
+#define TSIP_DIALOG_GET_STACK(self) TSIP_STACK(TSIP_DIALOG_GET_SS((self))->stack)
+
+#define TSIP_DIALOG_TIMER_CANCEL(TX) \
+ tsk_timer_mgr_global_cancel(self->timer##TX.id)
+
+// TX MUST be in seconds
+#define TSIP_DIALOG_TIMER_SCHEDULE(name, TX) \
+ self->timer##TX.id = tsk_timer_mgr_global_schedule(self->timer##TX.timeout, TSK_TIMER_CALLBACK_F(tsip_dialog_##name##_timer_callback), self)
+
+#define TSIP_DIALOG_SIGNAL(self, code, phrase) \
+ tsip_event_signal(tsip_event_dialog, TSIP_DIALOG(self)->ss, code, phrase)
+
+#define TSIP_DIALOG_SIGNAL_2(self, code, phrase, message) \
+ tsip_event_signal_2(tsip_event_dialog, TSIP_DIALOG(self)->ss, code, phrase, message)
+
+#if !defined(TSIP_DIALOG_SHUTDOWN_TIMEOUT)
+# define TSIP_DIALOG_SHUTDOWN_TIMEOUT 2000 /* miliseconds. */
+#endif
+
+#if !defined(TSIP_DIALOG_INVALID_ID)
+# define TSIP_DIALOG_INVALID_ID 0
+#endif
+
+typedef uint64_t tsip_dialog_id_t;
+
+typedef enum tsip_dialog_state_e
+{
+ tsip_initial,
+ tsip_early,
+ tsip_established,
+ tsip_terminated
+}
+tsip_dialog_state_t;
+
+typedef enum tsip_dialog_type_e
+{
+ tsip_dialog_unknown,
+ tsip_dialog_INVITE,
+ tsip_dialog_MESSAGE,
+ tsip_dialog_INFO,
+ tsip_dialog_OPTIONS,
+ tsip_dialog_PUBLISH,
+ tsip_dialog_REGISTER,
+ tsip_dialog_SUBSCRIBE,
+}
+tsip_dialog_type_t;
+
+typedef enum tsip_dialog_event_type_e
+{
+ tsip_dialog_i_msg,
+ tsip_dialog_o_msg,
+ tsip_dialog_transac_ok,
+ tsip_dialog_canceled,
+ tsip_dialog_terminated,
+ tsip_dialog_timedout,
+ tsip_dialog_error,
+ tsip_dialog_transport_error,
+}
+tsip_dialog_event_type_t;
+
+typedef int (*tsip_dialog_event_callback_f)(const void *arg, tsip_dialog_event_type_t type, const tsip_message_t *msg);
+#define TSIP_DIALOG_EVENT_CALLBACK_F(callback) ((tsip_dialog_event_callback_f)(callback))
+
+/*================================
+*/
+typedef struct tsip_dialog_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsip_dialog_type_t type;
+ tsip_dialog_id_t id;
+
+ tsk_fsm_t* fsm;
+
+ tsip_ssession_t* ss;
+ tsip_action_t* curr_action;
+
+ tsip_dialog_state_t state;
+
+ tsk_bool_t initialized;
+ tsk_bool_t running;
+
+ tnet_fd_t connected_fd;
+
+ struct{
+ char* phrase;
+ short code;
+ tsip_message_t* message;
+ } last_error;
+
+ char* tag_local;
+ tsip_uri_t* uri_local;
+ char* tag_remote;
+ tsip_uri_t* uri_remote;
+
+ tsip_uri_t* uri_remote_target;
+ struct sockaddr_storage remote_addr; // Only valid for Dgram
+
+ uint32_t cseq_value;
+ char* cseq_method;
+
+ int64_t expires; /* in milliseconds */
+
+ char* callid;
+
+ tsip_header_Record_Routes_L_t *record_routes;
+
+ tsip_challenges_L_t *challenges;
+
+ tsip_dialog_event_callback_f callback;
+
+ TSK_DECLARE_SAFEOBJ;
+}
+tsip_dialog_t;
+
+#define TSIP_DECLARE_DIALOG tsip_dialog_t __dialog__
+
+typedef tsk_list_t tsip_dialogs_L_t;
+/*
+================================*/
+
+tsip_request_t *tsip_dialog_request_new(const tsip_dialog_t *self, const char* method);
+int tsip_dialog_request_send(const tsip_dialog_t *self, tsip_request_t* request);
+tsip_response_t *tsip_dialog_response_new(tsip_dialog_t *self, short status, const char* phrase, const tsip_request_t* request);
+int tsip_dialog_response_send(const tsip_dialog_t *self, tsip_response_t* response);
+int tsip_dialog_apply_action(tsip_message_t* message, const tsip_action_t* action);
+
+int64_t tsip_dialog_get_newdelay(tsip_dialog_t *self, const tsip_message_t* message);
+int tsip_dialog_update(tsip_dialog_t *self, const tsip_response_t* response);
+int tsip_dialog_update_2(tsip_dialog_t *self, const tsip_request_t* invite);
+int tsip_dialog_getCKIK(tsip_dialog_t *self, AKA_CK_T *ck, AKA_IK_T *ik);
+
+int tsip_dialog_init(tsip_dialog_t *self, tsip_dialog_type_t type, const char* call_id, tsip_ssession_t* ss, tsk_fsm_state_id curr, tsk_fsm_state_id term);
+int tsip_dialog_fsm_act(tsip_dialog_t* self, tsk_fsm_action_id , const tsip_message_t* , const tsip_action_handle_t*);
+#define tsip_dialog_fsm_act_2(self, action_id) tsip_dialog_fsm_act((self), (action_id), tsk_null, tsk_null)
+tsk_bool_t tsip_dialog_keep_action(const tsip_dialog_t* self, const tsip_response_t *response);
+int tsip_dialog_set_connected_fd(tsip_dialog_t* self, tnet_fd_t fd);
+int tsip_dialog_set_curr_action(tsip_dialog_t* self, const tsip_action_t* action);
+int tsip_dialog_set_lasterror(tsip_dialog_t* self, const char* phrase, short code);
+int tsip_dialog_set_lasterror_2(tsip_dialog_t* self, const char* phrase, short code, const tsip_message_t *message);
+int tsip_dialog_get_lasterror(const tsip_dialog_t* self, short *code, const char** phrase, const tsip_message_t **message);
+int tsip_dialog_hangup(tsip_dialog_t *self, const tsip_action_t* action);
+int tsip_dialog_shutdown(tsip_dialog_t *self, const tsip_action_t* action);
+int tsip_dialog_signal_transport_error(tsip_dialog_t *self);
+int tsip_dialog_remove(const tsip_dialog_t* self);
+int tsip_dialog_cmp(const tsip_dialog_t *d1, const tsip_dialog_t *d2);
+int tsip_dialog_deinit(tsip_dialog_t *self);
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_H */
+
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_info.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_info.h
new file mode 100644
index 0000000..94fe6ad
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_info.h
@@ -0,0 +1,57 @@
+/* Copyright (C) 2011 Doubango Telecom <http://www.doubango.org>
+* Copyright (C) 2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango(dot)org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_info.h
+ * @brief SIP dialog INFO.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_INFO_H
+#define TINYSIP_DIALOG_INFO_H
+
+#include "tinysip_config.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+TSIP_BEGIN_DECLS
+
+/* Forward declaration */
+struct tsip_message_s;
+
+#define TSIP_DIALOG_INFO(self) ((tsip_dialog_info_t*)(self))
+
+typedef struct tsip_dialog_info
+{
+ TSIP_DECLARE_DIALOG;
+ /**< Last incoming message. */
+ struct tsip_message_s* last_iMessage;
+}
+tsip_dialog_info_t;
+
+tsip_dialog_info_t* tsip_dialog_info_create(const tsip_ssession_handle_t* ss);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_info_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_INFO_H */
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_invite.common.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_invite.common.h
new file mode 100644
index 0000000..1496ca7
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_invite.common.h
@@ -0,0 +1,122 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_invite.common.h
+ * @brief SIP dialog INVITE (common variables).
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_INVITE_COMMON_H
+#define TINYSIP_DIALOG_INVITE_COMMON_H
+
+#include "tinysip/api/tsip_api_invite.h"
+
+#define DEBUG_STATE_MACHINE 1
+#define TSIP_DIALOG_INVITE_SIGNAL(self, type, code, phrase, message) \
+ tsip_invite_event_signal(type, TSIP_DIALOG(self)->ss, code, phrase, message)
+#define TSIP_DIALOG_INVITE_TIMER_SCHEDULE(TX) TSIP_DIALOG_TIMER_SCHEDULE(invite, TX)
+
+#define TSIP_DIALOG_INVITE_ICE_CONNCHECK_TIMEOUT 16000
+
+/* ======================== actions ======================== */
+typedef enum _fsm_action_e
+{
+ _fsm_action_accept = tsip_atype_accept,
+ _fsm_action_reject = tsip_atype_hangup,
+ _fsm_action_dtmf_send = tsip_atype_dtmf_send,
+ _fsm_action_msrp_send_msg = tsip_atype_lmessage,
+ _fsm_action_oINVITE = tsip_atype_invite,
+ _fsm_action_oCANCEL = tsip_atype_cancel,
+ _fsm_action_oHold = tsip_atype_hold,
+ _fsm_action_oResume = tsip_atype_resume,
+ _fsm_action_oECT = tsip_atype_ect,
+ _fsm_action_iECT_ACCEPT = tsip_atype_ect_accept,
+ _fsm_action_iECT_REJECT = tsip_atype_ect_reject,
+ _fsm_action_iECT_lNOTIFY = tsip_atype_ect_lnotify,
+ _fsm_action_oINFO = tsip_atype_info_send,
+ _fsm_action_oBYE = tsip_atype_hangup,
+ _fsm_action_oShutdown = tsip_atype_shutdown,
+ _fsm_action_transporterror = tsip_atype_transport_error,
+
+ _fsm_action_iINVITE = 0xFF,
+ _fsm_action_oUPDATE,
+ _fsm_action_iUPDATE,
+ _fsm_action_iCANCEL,
+ _fsm_action_iPRACK,
+ _fsm_action_oPRACK,
+ _fsm_action_iACK,
+ _fsm_action_oACK,
+ _fsm_action_iOPTIONS,
+ _fsm_action_oOPTIONS,
+ _fsm_action_iBYE,
+ _fsm_action_iREFER,
+ _fsm_action_iINFO,
+ _fsm_action_iNOTIFY,
+
+ _fsm_action_timer100rel,
+ _fsm_action_timerRefresh,
+ _fsm_action_timerRSVP,
+
+ _fsm_action_i1xx,
+ _fsm_action_i2xx,
+ _fsm_action_i300_to_i699,
+ _fsm_action_i401_i407,
+ _fsm_action_i422,
+
+ _fsm_action_shutdown_timedout, /* Any -> Terminated */
+ _fsm_action_error,
+}
+_fsm_action_t;
+
+/* ======================== states ======================== */
+typedef enum _fsm_state_e
+{
+ _fsm_state_Started,
+ _fsm_state_Outgoing,
+ _fsm_state_Incoming,
+ _fsm_state_Trying,
+ _fsm_state_Ringing,
+ _fsm_state_Cancelling,
+ _fsm_state_InProgress,
+
+ _fsm_state_Holding,
+ _fsm_state_Resuming,
+
+ _fsm_state_oECTing,
+ _fsm_state_iECTing,
+ _fsm_state_iECTreq,
+
+ _fsm_state_Connected,
+ _fsm_state_Terminated
+}
+_fsm_state_t;
+
+
+#define send_INVITE(self, force_sdp) send_INVITEorUPDATE(self, tsk_true, force_sdp)
+#define send_UPDATE(self, force_sdp) send_INVITEorUPDATE(self, tsk_false, force_sdp)
+
+#else
+#error "This file must only be included in a source(.c or .cxx)"
+
+#endif /* TINYSIP_DIALOG_INVITE_COMMON_H */
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_invite.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_invite.h
new file mode 100644
index 0000000..b3bbfea
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_invite.h
@@ -0,0 +1,128 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_invite.h
+ * @brief SIP dialog INVITE.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_INVITE_H
+#define TINYSIP_DIALOG_INVITE_H
+
+#include "tinysip_config.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+#include "tinymedia/tmedia_session.h"
+
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_DIALOG_INVITE(self) ((tsip_dialog_invite_t*)(self))
+
+typedef struct tsip_dialog_invite
+{
+ TSIP_DECLARE_DIALOG;
+
+ tsk_bool_t support_update; /**< Indicates whether the remote party support UPDATE */
+ tsk_bool_t is_client;
+ tsk_bool_t is_transf;
+ tsk_bool_t refersub;
+ tsk_bool_t use_rtcp;
+ tsk_bool_t use_rtcpmux;
+ tsk_bool_t is_initial_iack_pending; // we're waiting for the initial incoming ACK (for the 200 OK) to ensure the session
+ tsk_bool_t is_cancelling; // whether we're cancelling the outgoing INVITE
+ uint32_t rseq;
+ uint32_t cseq_out_media_update; // CSeq for the last media update request (INVITE or UPDATE).
+ uint64_t last_out_fastupdate_time;
+
+ tsip_timer_t timershutdown;
+ tsip_timer_t timer100rel;
+
+ tsip_response_t* last_o1xxrel;
+ tsip_request_t* last_iInvite;
+ tsip_request_t* last_oInvite;
+ tsip_request_t* last_iRefer;
+ tmedia_session_mgr_t* msession_mgr; /**< Media session Manager */
+
+ struct tsip_ssession_s* ss_transf;
+
+ /* ICE */
+ struct{
+ tmedia_type_t media_type;
+ tsk_bool_t is_jingle;
+ tsk_bool_t start_smgr;
+ struct tnet_ice_ctx_s *ctx_audio;
+ struct tnet_ice_ctx_s *ctx_video;
+ tsk_fsm_action_id last_action_id;
+ tsip_action_t* last_action;
+ tsip_message_t* last_message;
+ int32_t last_sdp_ro_ver;
+ } ice;
+
+ /* Session Timers */
+ struct{
+ tsip_timer_t timer;
+ char* refresher;
+ uint64_t minse;
+ tsk_bool_t is_refresher;
+ } stimers;
+ /* QoS (Preconditions) */
+ struct{
+ tsip_timer_t timer;
+ enum tmedia_qos_stype_e type;
+ enum tmedia_qos_strength_e strength;
+ } qos;
+ /* Hold/Resume */
+ struct{
+ unsigned remote:1;
+ unsigned local:1;
+ } hold;
+
+ struct{
+ unsigned _100rel:1;
+ unsigned precondition:1;
+ unsigned timer:1;
+ unsigned norefersub:1;
+ unsigned ice:1;
+ } supported;
+
+ struct{
+ unsigned _100rel:1;
+ unsigned precondition:1;
+ unsigned timer:1;
+ unsigned norefersub;
+ unsigned ice:1;
+ } required;
+}
+tsip_dialog_invite_t;
+
+tsip_dialog_invite_t* tsip_dialog_invite_create(const tsip_ssession_handle_t* ss, const char* call_id);
+
+int tsip_dialog_invite_start(tsip_dialog_invite_t *self);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_invite_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_INVITE_H */
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_layer.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_layer.h
new file mode 100644
index 0000000..3539361
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_layer.h
@@ -0,0 +1,88 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog.h
+ * @brief SIP dialog layer.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_LAYER_H
+#define TINYSIP_DIALOG_LAYER_H
+
+#include "tinysip_config.h"
+
+#include "tsip.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+#include "tsk_condwait.h"
+#include "tsk_safeobj.h"
+#include "tsk_list.h"
+
+TSIP_BEGIN_DECLS
+
+typedef struct tsip_dialog_layer_s
+{
+ TSK_DECLARE_OBJECT;
+
+ const tsip_stack_t *stack;
+
+ tsip_dialogs_L_t *dialogs;
+
+ struct{
+ tsk_bool_t inprogress;
+ tsk_bool_t phase2; /* whether unregistering? */
+ tsk_condwait_handle_t* condwait;
+ } shutdown;
+
+ TSK_DECLARE_SAFEOBJ;
+}
+tsip_dialog_layer_t;
+
+typedef tsk_list_t tsip_dialog_layers_L_t;
+
+tsip_dialog_layer_t* tsip_dialog_layer_create(tsip_stack_t* stack);
+
+TINYSIP_API tsip_dialog_t* tsip_dialog_layer_find_by_ss(tsip_dialog_layer_t *self, const tsip_ssession_handle_t *ss);
+tsip_dialog_t* tsip_dialog_layer_find_by_ssid(tsip_dialog_layer_t *self, tsip_ssession_id_t ssid);
+tsip_dialog_t* tsip_dialog_layer_find_by_callid(tsip_dialog_layer_t *self, const char* callid);
+tsk_bool_t tsip_dialog_layer_have_dialog_with_callid(const tsip_dialog_layer_t *self, const char* callid);
+
+tsk_size_t tsip_dialog_layer_count_active_calls(tsip_dialog_layer_t *self);
+
+
+TINYSIP_API int tsip_dialog_layer_shutdownAll(tsip_dialog_layer_t *self);
+int tsip_dialog_layer_signal_stack_disconnected(tsip_dialog_layer_t *self);
+int tsip_dialog_layer_signal_peer_disconnected(tsip_dialog_layer_t *self, const struct tsip_transport_stream_peer_s* peer);
+int tsip_dialog_layer_remove_callid_from_stream_peers(tsip_dialog_layer_t *self, const char* callid);
+tsip_dialog_t* tsip_dialog_layer_new(tsip_dialog_layer_t *self, tsip_dialog_type_t type, const tsip_ssession_t *ss);
+int tsip_dialog_layer_remove(tsip_dialog_layer_t *self, const tsip_dialog_t *dialog);
+
+int tsip_dialog_layer_handle_incoming_msg(const tsip_dialog_layer_t *self, tsip_message_t* message);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_layer_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_LAYER_H */
+
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_message.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_message.h
new file mode 100644
index 0000000..904af54
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_message.h
@@ -0,0 +1,57 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_message.h
+ * @brief SIP dialog MESSAGE.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_MESSAGE_H
+#define TINYSIP_DIALOG_MESSAGE_H
+
+#include "tinysip_config.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+TSIP_BEGIN_DECLS
+
+/* Forward declaration */
+struct tsip_message_s;
+
+#define TSIP_DIALOG_MESSAGE(self) ((tsip_dialog_message_t*)(self))
+
+typedef struct tsip_dialog_message
+{
+ TSIP_DECLARE_DIALOG;
+ /**< Last incoming or outgoing message. */
+ struct tsip_message_s* request;
+}
+tsip_dialog_message_t;
+
+tsip_dialog_message_t* tsip_dialog_message_create(const tsip_ssession_handle_t* ss);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_message_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_MESSAGE_H */
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_options.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_options.h
new file mode 100644
index 0000000..e092a32
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_options.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_options.h
+ * @brief SIP dialog OPTIONS as per RFC 3261 section 11.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_OPTIONS_H
+#define TINYSIP_DIALOG_OPTIONS_H
+
+#include "tinysip_config.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_DIALOG_OPTIONS(self) ((tsip_dialog_options_t*)(self))
+
+typedef struct tsip_dialog_options
+{
+ TSIP_DECLARE_DIALOG;
+ /**< Last incoming message. */
+ struct tsip_message_s* last_iMessage;
+}
+tsip_dialog_options_t;
+
+tsip_dialog_options_t* tsip_dialog_options_create(const tsip_ssession_handle_t* ss);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_options_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_OPTIONS_H */
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_publish.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_publish.h
new file mode 100644
index 0000000..b4ef37b
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_publish.h
@@ -0,0 +1,60 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_publish.h
+ * @brief SIP dialog PUBLISH as per RFC 3903.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_PUBLISH_H
+#define TINYSIP_DIALOG_PUBLISH_H
+
+#include "tinysip_config.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_DIALOG_PUBLISH(self) ((tsip_dialog_publish_t*)(self))
+
+typedef struct tsip_dialog_publish
+{
+ TSIP_DECLARE_DIALOG;
+
+ tsip_timer_t timerrefresh;
+ tsip_timer_t timershutdown;
+
+ tsk_bool_t unpublishing;
+ char* etag;
+}
+tsip_dialog_publish_t;
+
+tsip_dialog_publish_t* tsip_dialog_publish_create(const tsip_ssession_handle_t* ss);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_publish_def_t;
+
+
+TSIP_END_DECLS
+
+
+#endif /* TINYSIP_DIALOG_PUBLISH_H */
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_register.common.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_register.common.h
new file mode 100644
index 0000000..94e4897
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_register.common.h
@@ -0,0 +1,75 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as publishd by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+#ifndef TINYSIP_DIALOG_REGISTER_COMMON_H
+#define TINYSIP_DIALOG_REGISTER_COMMON_H
+
+#include "tinysip/api/tsip_api_register.h"
+
+#define DEBUG_STATE_MACHINE 1
+#define TSIP_DIALOG_REGISTER_TIMER_SCHEDULE(TX) TSIP_DIALOG_TIMER_SCHEDULE(register, TX)
+#define TSIP_DIALOG_REGISTER_SIGNAL(self, type, code, phrase, message) \
+ tsip_register_event_signal(type, TSIP_DIALOG(self)->ss, code, phrase, message)
+
+
+/* ======================== actions ======================== */
+typedef enum _fsm_action_e
+{
+ _fsm_action_accept = tsip_atype_accept,
+ _fsm_action_reject = tsip_atype_hangup,
+ _fsm_action_hangup = tsip_atype_hangup,
+ _fsm_action_oREGISTER = tsip_atype_register,
+ _fsm_action_cancel = tsip_atype_cancel,
+ _fsm_action_shutdown = tsip_atype_shutdown,
+ _fsm_action_transporterror = tsip_atype_transport_error,
+
+ _fsm_action_1xx = 0xFF,
+ _fsm_action_2xx,
+ _fsm_action_401_407_421_494,
+ _fsm_action_423,
+ _fsm_action_300_to_699,
+
+ _fsm_action_iREGISTER,
+
+ _fsm_action_shutdown_timedout, /* Any -> Terminated */
+ _fsm_action_error,
+}
+_fsm_action_t;
+
+/* ======================== states ======================== */
+typedef enum _fsm_state_e
+{
+ _fsm_state_Started,
+ _fsm_state_InProgress, // Outgoing (Client)
+ _fsm_state_Incoming, // Incoming (Server)
+ _fsm_state_Connected,
+ _fsm_state_Terminated
+}
+_fsm_state_t;
+
+
+#define _fsm_cond_silent_shutdown _fsm_cond_silent_hangup
+#define _fsm_cond_not_silent_shutdown _fsm_cond_not_silent_hangup
+
+#else
+#error "This file must only be included in a source(.c or .cxx)"
+
+#endif /* TINYSIP_DIALOG_REGISTER_COMMON_H */
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_register.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_register.h
new file mode 100644
index 0000000..d2acf1a
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_register.h
@@ -0,0 +1,62 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_register.h
+ * @brief SIP dialog REGISTER.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_REGISTER_H
+#define TINYSIP_DIALOG_REGISTER_H
+
+#include "tinysip_config.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_DIALOG_REGISTER(self) ((tsip_dialog_register_t*)(self))
+
+/**< SIP REGISTER dialog */
+typedef struct tsip_dialog_register
+{
+ TSIP_DECLARE_DIALOG;
+
+ tsip_timer_t timerrefresh;
+ tsip_timer_t timershutdown;
+
+ tsip_request_t* last_iRegister;
+
+ tsk_bool_t unregistering;
+ tsk_bool_t is_server;
+}
+tsip_dialog_register_t;
+
+tsip_dialog_register_t* tsip_dialog_register_create(const tsip_ssession_handle_t* ss, const char* call_id);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_register_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_REGISTER_H */
+
diff --git a/tinySIP/include/tinysip/dialogs/tsip_dialog_subscribe.h b/tinySIP/include/tinysip/dialogs/tsip_dialog_subscribe.h
new file mode 100644
index 0000000..c7db35b
--- /dev/null
+++ b/tinySIP/include/tinysip/dialogs/tsip_dialog_subscribe.h
@@ -0,0 +1,57 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_dialog_subscribe.h
+ * @brief SIP dialog SUBSCRIBE as per RFC 3265.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_DIALOG_SUBSCRIBE_H
+#define TINYSIP_DIALOG_SUBSCRIBE_H
+
+#include "tinysip_config.h"
+#include "tinysip/dialogs/tsip_dialog.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_DIALOG_SUBSCRIBE(self) ((tsip_dialog_subscribe_t*)(self))
+
+typedef struct tsip_dialog_subscribe
+{
+ TSIP_DECLARE_DIALOG;
+
+ tsip_timer_t timerrefresh;
+ tsip_timer_t timershutdown;
+
+ tsk_bool_t unsubscribing;
+}
+tsip_dialog_subscribe_t;
+
+tsip_dialog_subscribe_t* tsip_dialog_subscribe_create(const tsip_ssession_handle_t* ss);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_dialog_subscribe_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_DIALOG_SUBSCRIBE_H */
diff --git a/tinySIP/include/tinysip/headers/tsip_header.h b/tinySIP/include/tinysip/headers/tsip_header.h
new file mode 100644
index 0000000..b611140
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header.h
@@ -0,0 +1,196 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header.h
+ * @brief Defines a SIP header (field-name: field-value).
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_HEADER_H
+#define TINYSIP_HEADER_H
+
+#include "tinysip_config.h"
+
+#include "tsk_ragel_state.h"
+
+#include "tsk_params.h"
+#include "tsk_object.h"
+#include "tsk_safeobj.h"
+#include "tsk_memory.h"
+#include "tsk_string.h"
+#include "tsk_list.h"
+#include "tsk_buffer.h"
+
+TSIP_BEGIN_DECLS
+
+struct tsip_header_s;
+
+#define TSIP_HEADER(self) ((tsip_header_t*)(self))
+#define TSIP_HEADER_PARAMS(self) (TSIP_HEADER(self)->params)
+#define TSIP_HEADER_VALUE_SERIALIZE_F(self) ((tsip_header_value_serialize_f)(self))
+#define TSIP_HEADER_GET_PARAM_VALUE_F(self) ((tsip_header_get_param_value_f)(self))
+
+typedef int (*tsip_header_value_serialize_f)(const struct tsip_header_s* header, tsk_buffer_t* output);
+typedef char* (*tsip_header_get_special_param_value_f)(const struct tsip_header_s* header, const char* pname);
+
+/**
+ * @enum tsip_header_type_e
+ *
+ * @brief List of all supported headers.
+**/
+typedef enum tsip_header_type_e
+{
+ tsip_htype_Accept,
+ tsip_htype_Accept_Contact,
+ tsip_htype_Accept_Encoding,
+ tsip_htype_Accept_Language,
+ tsip_htype_Accept_Resource_Priority,
+ tsip_htype_Alert_Info,
+ tsip_htype_Allow,
+ tsip_htype_Allow_Events,
+ tsip_htype_Authentication_Info,
+ tsip_htype_Authorization,
+ tsip_htype_Call_ID,
+ tsip_htype_Call_Info,
+ tsip_htype_Contact,
+ tsip_htype_Content_Disposition,
+ tsip_htype_Content_Encoding,
+ tsip_htype_Content_Language,
+ tsip_htype_Content_Length,
+ tsip_htype_Content_Type,
+ tsip_htype_CSeq,
+ tsip_htype_Date,
+ tsip_htype_Dummy,
+ tsip_htype_Error_Info,
+ tsip_htype_Event,
+ tsip_htype_Expires,
+ tsip_htype_From,
+ tsip_htype_History_Info,
+ tsip_htype_Identity,
+ tsip_htype_Identity_Info,
+ tsip_htype_In_Reply_To,
+ tsip_htype_Join,
+ tsip_htype_Max_Forwards,
+ tsip_htype_MIME_Version,
+ tsip_htype_Min_Expires,
+ tsip_htype_Min_SE,
+ tsip_htype_Organization,
+ tsip_htype_Path,
+ tsip_htype_Priority,
+ tsip_htype_Privacy,
+ tsip_htype_Proxy_Authenticate,
+ tsip_htype_Proxy_Authorization,
+ tsip_htype_Proxy_Require,
+ tsip_htype_RAck,
+ tsip_htype_Reason,
+ tsip_htype_Record_Route,
+ tsip_htype_Refer_Sub,
+ tsip_htype_Refer_To,
+ tsip_htype_Referred_By,
+ tsip_htype_Reject_Contact,
+ tsip_htype_Replaces,
+ tsip_htype_Reply_To,
+ tsip_htype_Request_Disposition,
+ tsip_htype_Require,
+ tsip_htype_Resource_Priority,
+ tsip_htype_Retry_After,
+ tsip_htype_Route,
+ tsip_htype_RSeq,
+ tsip_htype_Security_Client,
+ tsip_htype_Security_Server,
+ tsip_htype_Security_Verify,
+ tsip_htype_Server,
+ tsip_htype_Service_Route,
+ tsip_htype_Session_Expires,
+ tsip_htype_SIP_ETag,
+ tsip_htype_SIP_If_Match,
+ tsip_htype_Subject,
+ tsip_htype_Subscription_State,
+ tsip_htype_Supported,
+ tsip_htype_Target_Dialog,
+ tsip_htype_Timestamp,
+ tsip_htype_To,
+ tsip_htype_Unsupported,
+ tsip_htype_User_Agent,
+ tsip_htype_Via,
+ tsip_htype_Warning,
+ tsip_htype_WWW_Authenticate,
+ tsip_htype_P_Access_Network_Info,
+ tsip_htype_P_Answer_State,
+ tsip_htype_P_Asserted_Identity,
+ tsip_htype_P_Associated_URI,
+ tsip_htype_P_Called_Party_ID,
+ tsip_htype_P_Charging_Function_Addresses,
+ tsip_htype_P_Charging_Vector,
+ tsip_htype_P_DCS_Billing_Info,
+ tsip_htype_P_DCS_LAES,
+ tsip_htype_P_DCS_OSPS,
+ tsip_htype_P_DCS_Redirect,
+ tsip_htype_P_DCS_Trace_Party_ID,
+ tsip_htype_P_Early_Media,
+ tsip_htype_P_Media_Authorization,
+ tsip_htype_P_Preferred_Identity,
+ tsip_htype_P_Profile_Key,
+ tsip_htype_P_User_Database,
+ tsip_htype_P_Visited_Network_ID
+}
+tsip_header_type_t;
+
+/*================================
+*/
+typedef struct tsip_header_s
+{
+ TSK_DECLARE_OBJECT;
+ tsip_header_type_t type;
+ tsip_header_value_serialize_f serialize;
+ tsip_header_get_special_param_value_f get_special_param_value;
+ tsk_params_L_t *params;
+}
+tsip_header_t;
+
+#define TSIP_DECLARE_HEADER tsip_header_t __header__
+typedef tsk_list_t tsip_headers_L_t; /**< List of @ref tsip_header_t elements. */
+/*
+================================*/
+
+TINYSIP_API const char *tsip_header_get_name(tsip_header_type_t type);
+TINYSIP_API const char *tsip_header_get_name_2(const tsip_header_t *self);
+TINYSIP_API char tsip_header_get_param_separator(const tsip_header_t *self);
+TINYSIP_API int tsip_header_serialize(const tsip_header_t *self, tsk_buffer_t *output);
+TINYSIP_API char* tsip_header_tostring(const tsip_header_t *self);
+TINYSIP_API int tsip_header_value_serialize(const tsip_header_t *self, tsk_buffer_t *output);
+TINYSIP_API char* tsip_header_value_tostring(const tsip_header_t *self);
+TINYSIP_API char* tsip_header_get_param_value(const tsip_header_t *self, const char* pname);
+
+#define TSIP_HEADER_HAVE_PARAM(self, name) ((self) && TSIP_HEADER((self))->params) ? tsk_params_have_param(TSIP_HEADER(self)->params, name) : tsk_false
+#define TSIP_HEADER_ADD_PARAM(self, name, value) tsk_params_add_param((self) ? &TSIP_HEADER((self))->params : tsk_null, name, value)
+#define TSIP_HEADER_REMOVE_PARAM(self, name) tsk_params_remove_param((self) ? TSIP_HEADER((self))->params : tsk_null, name)
+#define TSIP_HEADER_GET_PARAM_BY_NAME(self, name) tsk_params_get_param_by_name((self) ? TSIP_HEADER((self))->params : tsk_null, name)
+#define TSIP_HEADER_GET_PARAM_VALUE(self, name) tsk_params_get_param_value((self) ? TSIP_HEADER((self))->params : tsk_null, name)
+#define TSIP_HEADER_GET_PARAM_VALUE_AS_INT(self, name) tsk_params_get_param_value_as_int((self) ? TSIP_HEADER((self))->params : tsk_null, name)
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_HEADERS_H */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Accept_Contact.h b/tinySIP/include/tinysip/headers/tsip_header_Accept_Contact.h
new file mode 100644
index 0000000..19aaa1b
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Accept_Contact.h
@@ -0,0 +1,56 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Accept_Contact.h
+ * @brief SIP header 'Accept-Contact'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ACCEPT_CONTACT_H_
+#define _TSIP_HEADER_ACCEPT_CONTACT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Accept-Contact' as per RFC 3261 subclause .
+/// @author Mamadou
+/// @date 12/3/2009
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Accept_Contact_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Accept_Contact_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ACCEPT_CONTACT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Accept_Encoding.h b/tinySIP/include/tinysip/headers/tsip_header_Accept_Encoding.h
new file mode 100644
index 0000000..efff6cd
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Accept_Encoding.h
@@ -0,0 +1,56 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Accept_Encoding.h
+ * @brief SIP header 'Accept-Encoding'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ACCEPT_ENCODING_H_
+#define _TSIP_HEADER_ACCEPT_ENCODING_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Accept-Encoding'.
+/// @author Mamadou
+/// @date 12/3/2009
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Accept_Encoding_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Accept_Encoding_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ACCEPT_ENCODING_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Accept_Language.h b/tinySIP/include/tinysip/headers/tsip_header_Accept_Language.h
new file mode 100644
index 0000000..fcb631b
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Accept_Language.h
@@ -0,0 +1,56 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Accept_Language.h
+ * @brief SIP header 'Accept-Language'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ACCEPT_LANGUAGE_H_
+#define _TSIP_HEADER_ACCEPT_LANGUAGE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Accept-Contact' .
+/// @author Mamadou
+/// @date 12/3/2009
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Accept_Language_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Accept_Language_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ACCEPT_LANGUAGE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Accept_Resource_Priority.h b/tinySIP/include/tinysip/headers/tsip_header_Accept_Resource_Priority.h
new file mode 100644
index 0000000..09143a5
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Accept_Resource_Priority.h
@@ -0,0 +1,56 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Accept_Resource_Priority.h
+ * @brief SIP header 'Accept-Resource-Priority'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ACCEPT_RESOURCE_PRIORITY_H_
+#define _TSIP_HEADER_ACCEPT_RESOURCE_PRIORITY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Accept-Contact' .
+/// @author Mamadou
+/// @date 12/3/2009
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Accept_Resource_Priority_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Accept_Resource_Priority_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ACCEPT_RESOURCE_PRIORITY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Alert_Info.h b/tinySIP/include/tinysip/headers/tsip_header_Alert_Info.h
new file mode 100644
index 0000000..77a26be
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Alert_Info.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Alert_Info.h
+ * @brief SIP header 'Alert-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ALERT_INFO_H_
+#define _TSIP_HEADER_ALERT_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Alert-Info' as per RFC 3261 subclause .
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Alert_Info_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Alert_Info_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ALERT_INFO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Allow.h b/tinySIP/include/tinysip/headers/tsip_header_Allow.h
new file mode 100644
index 0000000..a43b9ba
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Allow.h
@@ -0,0 +1,66 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Allow.h
+ * @brief SIP header 'Allow'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ALLOW_H_
+#define _TSIP_HEADER_ALLOW_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_ALLOW_DEFAULT "ACK, BYE, CANCEL, INVITE, MESSAGE, NOTIFY, OPTIONS, PRACK, REFER, UPDATE"
+#define TSIP_HEADER_STR "Allow:" TSIP_HEADER_ALLOW_DEFAULT "\r\n"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Allow'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Allow_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsk_strings_L_t *methods;
+}
+tsip_header_Allow_t;
+
+TINYSIP_API tsip_header_Allow_t* tsip_header_Allow_create();
+
+TINYSIP_API tsip_header_Allow_t *tsip_header_Allow_parse(const char *data, tsk_size_t size);
+TINYSIP_API tsk_bool_t tsip_header_Allow_allows(const tsip_header_Allow_t* self, const char* method);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Allow_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ALLOW_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Allow_Events.h b/tinySIP/include/tinysip/headers/tsip_header_Allow_Events.h
new file mode 100644
index 0000000..d97b6b3
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Allow_Events.h
@@ -0,0 +1,63 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Allow_Events.h
+ * @brief SIP header 'Allow-Events'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ALLOW_EVENTS_H_
+#define _TSIP_HEADER_ALLOW_EVENTS_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Allow-Events'.
+///
+/// @par ABNF : Allow-Events = ( "Allow-Events" / "u" ) HCOLON event-type *(COMMA event-type)
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Allow_Events_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsk_strings_L_t *events;
+}
+tsip_header_Allow_Events_t;
+
+TINYSIP_API tsip_header_Allow_Events_t* tsip_header_Allow_Events_create();
+
+TINYSIP_API tsip_header_Allow_Events_t *tsip_header_Allow_Events_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Allow_Events_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ALLOW_EVENTS_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Authentication_Info.h b/tinySIP/include/tinysip/headers/tsip_header_Authentication_Info.h
new file mode 100644
index 0000000..0736dbc
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Authentication_Info.h
@@ -0,0 +1,56 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Authentication_Info.h
+ * @brief SIP header 'Authentication-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_AUTHENTICATION_INFO_H_
+#define _TSIP_HEADER_AUTHENTICATION_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Authentication-Info'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Authentication_Info_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Authentication_Info_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_AUTHENTICATION_INFO_H_ */
+
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Authorization.h b/tinySIP/include/tinysip/headers/tsip_header_Authorization.h
new file mode 100644
index 0000000..910fdc5
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Authorization.h
@@ -0,0 +1,96 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Authorization.h
+ * @brief SIP header 'Authorization'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_AUTHORIZATION_H_
+#define _TSIP_HEADER_AUTHORIZATION_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Authorization' as per RFC 3261 subclause .
+///
+/// @par ABNF = Authorization = "Authorization" HCOLON credentials
+/// credentials = ("Digest" LWS digest-response) / other-response
+/// digest-response = dig-resp *(COMMA dig-resp)
+/// dig-resp = username / realm / nonce / digest-uri / dresponse / algorithm / cnonce / opaque / message-qop / nonce-count / auth-param / auts
+/// username = "username" EQUAL username-value
+/// username-value = quoted-string
+/// digest-uri = "uri" EQUAL LDQUOT digest-uri-value RDQUOT
+/// digest-uri-value = auth-request-uri ; equal to request-uri as specified by HTTP/1.1
+/// message-qop = "qop" EQUAL qop-value
+/// cnonce = "cnonce" EQUAL cnonce-value
+/// cnonce-value = nonce-value
+/// nonce-count = "nc" EQUAL nc-value
+/// nc-value = 8LHEX
+/// dresponse = "response" EQUAL request-digest
+/// request-digest = LDQUOT 32LHEX RDQUOT
+/// auth-request-uri = not-defined
+///
+/// auth-param = auth-param-name EQUAL ( token / quoted-string )
+/// auth-param-name = token
+///
+/// other-response = auth-scheme LWS auth-param *(COMMA auth-param)
+/// auth-scheme = token
+/// auts = "auts" EQUAL auts-param
+/// auts-param = LDQUOT auts-value RDQUOT
+/// auts-value = [base64 encoding of AUTS]
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Authorization_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char* scheme;
+ char* username;
+ char* realm;
+ char* nonce;
+ char* uri;
+ char* response;
+ char* algorithm;
+ char* cnonce;
+ char* opaque;
+ char* qop;
+ char* nc;
+}
+tsip_header_Authorization_t;
+
+TINYSIP_API tsip_header_Authorization_t* tsip_header_Authorization_create();
+
+TINYSIP_API tsip_header_Authorization_t *tsip_header_Authorization_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Authorization_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_AUTHORIZATION_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_CSeq.h b/tinySIP/include/tinysip/headers/tsip_header_CSeq.h
new file mode 100644
index 0000000..98cd864
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_CSeq.h
@@ -0,0 +1,71 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_CSeq.h
+ * @brief SIP header 'CSeq'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CSEQ_H_
+#define _TSIP_HEADER_CSEQ_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/tsip_message_common.h" /* tsip_request_type_t */
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_CSEQ_VA_ARGS(seq, method) tsip_header_CSeq_def_t, (int32_t) seq, (const char*)method
+
+#define TSIP_HEADER_CSEQ_NONE 0
+#define TSIP_HEADER_CSEQ_DEFAULT 1
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'CSeq'.
+///
+/// @par ABNF: CSeq = "CSeq" HCOLON 1*DIGIT LWS Method
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_CSeq_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *method;
+ uint32_t seq;
+ tsip_request_type_t type;
+}
+tsip_header_CSeq_t;
+
+TINYSIP_API tsip_header_CSeq_t* tsip_header_CSeq_create(int32_t seq, const char*method);
+
+TINYSIP_API tsip_header_CSeq_t *tsip_header_CSeq_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_CSeq_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CSEQ_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Call_ID.h b/tinySIP/include/tinysip/headers/tsip_header_Call_ID.h
new file mode 100644
index 0000000..41a7f73
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Call_ID.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Call_ID.h
+ * @brief SIP header 'Call-ID'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CALL_ID_H_
+#define _TSIP_HEADER_CALL_ID_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tsk_uuid.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_CALL_ID_VA_ARGS(call_id) tsip_header_Call_ID_def_t, (const char*)call_id
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Call-ID'.
+///
+/// @par ABNF: Call-ID / i
+/// callid = word [ "@" word ]
+/// Call-ID = ( "Call-ID" / "i" ) HCOLON callid
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Call_ID_s
+{
+ TSIP_DECLARE_HEADER;
+ char *value;
+}
+tsip_header_Call_ID_t;
+
+TINYSIP_API tsip_header_Call_ID_t* tsip_header_Call_ID_create(const char* call_id);
+
+int tsip_header_Call_ID_random(tsk_uuidstring_t *result);
+TINYSIP_API tsip_header_Call_ID_t *tsip_header_Call_ID_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Call_ID_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CALL_ID_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Call_Info.h b/tinySIP/include/tinysip/headers/tsip_header_Call_Info.h
new file mode 100644
index 0000000..72f0d1a
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Call_Info.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Call_Info.h
+ * @brief SIP header 'Call-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CALL_INFO_H_
+#define _TSIP_HEADER_CALL_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Call-Info'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Call_Info_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Call_Info_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CALL_INFO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Contact.h b/tinySIP/include/tinysip/headers/tsip_header_Contact.h
new file mode 100644
index 0000000..7fb200e
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Contact.h
@@ -0,0 +1,90 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Contact.h
+ * @brief SIP header 'Contact' as per RFC 3261 subclause 20.1.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CONTACT_H_
+#define _TSIP_HEADER_CONTACT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/tsip_uri.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Contact'.
+///
+/// @par ABNF: Contact = ( "Contact" / "m" ) HCOLON ( STAR / (contact-param *(COMMA contact-param)))
+/// contact-param = (name-addr / addr-spec) *( SEMI contact-params)
+/// contact-params = c-p-q / c-p-expires / feature-param / temp-gruu / pub-gruu / c-p-instance / contact-extension
+/// c-p-q = "q" EQUAL qvalue
+/// c-p-expires = "expires" EQUAL delta-seconds
+/// feature-param = enc-feature-tag [ EQUAL LDQUOT (tag-value-list / string-value) RDQUOT ]
+/// enc-feature-tag = base-tags / other-tags
+/// base-tags = "audio" / "automata" / "class" / "duplex" / "data" / "control" / "mobility" / "description" / "events" / "priority" / "methods" / "schemes" / "application" / "video" / "language" / "type" / "isfocus" / "actor" / "text" / "extensions"
+/// other-tags = "+" ftag-name
+/// ftag-name = ALPHA *( ALPHA / DIGIT / "!" / "'" / "." / "-" / "%" )
+/// tag-value-list = tag-value *("," tag-value)
+/// tag-value = ["!"] (token-nobang / boolean / numeric)
+/// token-nobang = 1*( alphanum / "-" / "." / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
+/// boolean = "TRUE" / "FALSE"
+/// numeric = "#" numeric-relation number
+/// numeric-relation = ">=" / "<=" / "=" / (number ":")
+/// number = [ "+" / "-" ] 1*DIGIT ["." 0*DIGIT]
+/// string-value = "<" *(qdtext-no-abkt / quoted-pair ) ">"
+/// qdtext-no-abkt = LWS / %x21 / %x23-3B / %x3D / %x3F-5B / %x5D-7E / UTF8-NONASCII
+/// temp-gruu = "temp-gruu" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
+/// pub-gruu = "pub-gruu" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
+/// c-p-instance = "+sip.instance" EQUAL LDQUOT "<" instance-val ">" RDQUOT
+/// instance-val = *uric
+/// contact-extension = generic-param
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Contact_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+ int64_t expires;
+}
+tsip_header_Contact_t;
+typedef tsk_list_t tsip_header_Contacts_L_t;
+
+TINYSIP_API tsip_header_Contact_t* tsip_header_Contact_create();
+
+TINYSIP_API tsip_header_Contacts_L_t *tsip_header_Contact_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Contact_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CONTACT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Content_Disposition.h b/tinySIP/include/tinysip/headers/tsip_header_Content_Disposition.h
new file mode 100644
index 0000000..3ec3cef
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Content_Disposition.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Content_Disposition.h
+ * @brief SIP header 'Content-Disposition'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CONTENT_DISPOSITION_H_
+#define _TSIP_HEADER_CONTENT_DISPOSITION_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Content-Disposition'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Content_Disposition_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Content_Disposition_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CONTENT_DISPOSITION_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Content_Encoding.h b/tinySIP/include/tinysip/headers/tsip_header_Content_Encoding.h
new file mode 100644
index 0000000..995abbb
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Content_Encoding.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Content_Encoding.h
+ * @brief SIP header 'Content-Encoding' as per RFC 3261 subclause 20.1.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CONTENT_ENCODING_H_
+#define _TSIP_HEADER_CONTENT_ENCODING_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Content-Encoding'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Content_Encoding_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Content_Encoding_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CONTENT_ENCODING_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Content_Language.h b/tinySIP/include/tinysip/headers/tsip_header_Content_Language.h
new file mode 100644
index 0000000..86899b1
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Content_Language.h
@@ -0,0 +1,49 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Content_Language.h
+ * @brief SIP header 'Content-Language'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CONTENT_LANGUAGE_H_
+#define _TSIP_HEADER_CONTENT_LANGUAGE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Content-Language'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Content_Language_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Content_Language_t;
+
+#endif /* _TSIP_HEADER_CONTENT_LANGUAGE_H_ */ \ No newline at end of file
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Content_Length.h b/tinySIP/include/tinysip/headers/tsip_header_Content_Length.h
new file mode 100644
index 0000000..7f2ec61
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Content_Length.h
@@ -0,0 +1,66 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Content_Length.h
+ * @brief SIP header 'Content-Length'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CONTENT_LENGTH_H_
+#define _TSIP_HEADER_CONTENT_LENGTH_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_CONTENT_LENGTH_VA_ARGS(length) tsip_header_Content_Length_def_t, (uint32_t)length
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Content-Length'.
+///
+/// @par ABNF: Content-Length / l
+/// Content-Length = ( "Content-Length" / "l" ) HCOLON 1*DIGIT
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Content_Length_s
+{
+ TSIP_DECLARE_HEADER;
+
+ uint32_t length;
+}
+tsip_header_Content_Length_t;
+
+TINYSIP_API tsip_header_Content_Length_t* tsip_header_Content_Length_create(uint32_t length);
+TINYSIP_API tsip_header_Content_Length_t* tsip_header_Content_Length_create_null();
+
+TINYSIP_API tsip_header_Content_Length_t *tsip_header_Content_Length_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Content_Length_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CONTENT_LENGTH_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Content_Type.h b/tinySIP/include/tinysip/headers/tsip_header_Content_Type.h
new file mode 100644
index 0000000..48c32b6
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Content_Type.h
@@ -0,0 +1,79 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Content_Type.h
+ * @brief SIP header 'Content-Type'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_CONTENT_TYPE_H_
+#define _TSIP_HEADER_CONTENT_TYPE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_CONTENT_TYPE_VA_ARGS(type) tsip_header_Content_Type_def_t, (const char*)type
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Content-Type'.
+///
+/// @par ABNF= Content-Type / c
+/// Content-Type = ( "Content-Type" / "c" ) HCOLON media-type
+/// media-type = m-type SLASH m-subtype *( SEMI m-parameter)
+/// m-type = discrete-type / composite-type
+/// discrete-type = "text" / "image" / "audio" / "video" / "application" / extension-token
+/// composite-type = "message" / "multipart" / extension-token
+/// extension-token = ietf-token / x-token
+/// ietf-token = token
+/// x-token = "x-" token
+/// m-subtype = extension-token / iana-token
+/// iana-token = token
+/// m-parameter = m-attribute EQUAL m-value
+/// m-attribute = token
+/// m-value = token / quoted-string
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Content_Type_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char* type;
+}
+tsip_header_Content_Type_t;
+
+TINYSIP_API tsip_header_Content_Type_t* tsip_header_Content_Type_create(const char* type);
+TINYSIP_API tsip_header_Content_Type_t* tsip_header_Content_Type_create_null();
+
+TINYSIP_API tsip_header_Content_Type_t *tsip_header_Content_Type_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Content_Type_def_t;
+
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_CONTENT_TYPE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Date.h b/tinySIP/include/tinysip/headers/tsip_header_Date.h
new file mode 100644
index 0000000..f16ee7a
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Date.h
@@ -0,0 +1,79 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Date.h
+ * @brief SIP dummy header.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_DATE_H_
+#define _TSIP_HEADER_DATE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_DATE_VA_ARGS(wkday, month, day, year, h, m, s) tsip_header_Date_def_t, (const char*)wkday, (const char*)month, (int8_t)day, (int16_t)year, (int8_t)h, (int8_t)m, (int8_t)s
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP Date header.
+///
+/// @par ABNF : Date = "Date" HCOLON SIP-date
+/// SIP-date = rfc1123-date
+/// rfc1123-date = wkday "," SP date1 SP time SP "GMT"
+/// date1 = 2DIGIT SP month SP 4DIGIT
+/// time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
+/// wkday = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
+/// month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Date_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *wkday;
+ char *month;
+ int8_t day;
+ int16_t year;
+ struct{
+ int8_t h;
+ int8_t m;
+ int8_t s;
+ } time;
+}
+tsip_header_Date_t;
+
+TINYSIP_API tsip_header_Date_t* tsip_header_Date_create(const char* wkday, const char* month, int8_t day, int16_t year, int8_t h, int8_t m, int8_t s);
+TINYSIP_API tsip_header_Date_t* tsip_header_Date_create_null();
+
+TINYSIP_API tsip_header_Date_t *tsip_header_Date_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Date_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_DATE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Dummy.h b/tinySIP/include/tinysip/headers/tsip_header_Dummy.h
new file mode 100644
index 0000000..f1c5bb1
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Dummy.h
@@ -0,0 +1,66 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Dummy.h
+ * @brief SIP dummy header.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_DUMMY_H_
+#define _TSIP_HEADER_DUMMY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_DUMMY_VA_ARGS(name, value) tsip_header_Dummy_def_t, (const char*)name, (const char*)value
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP Dummy header.
+///
+/// @par ABNF : token SP* HCOLON SP*<: any*
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Dummy_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *name;
+ char *value;
+}
+tsip_header_Dummy_t;
+
+TINYSIP_API tsip_header_Dummy_t* tsip_header_Dummy_create(const char* name, const char* value);
+TINYSIP_API tsip_header_Dummy_t* tsip_header_Dummy_create_null();
+
+TINYSIP_API tsip_header_Dummy_t *tsip_header_Dummy_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Dummy_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_DUMMY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Error_Info.h b/tinySIP/include/tinysip/headers/tsip_header_Error_Info.h
new file mode 100644
index 0000000..53dc98f
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Error_Info.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Error_Info.h
+ * @brief SIP header 'Error-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ERROR_INFO_H_
+#define _TSIP_HEADER_ERROR_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Error-Info'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Error_Info_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Error_Info_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ERROR_INFO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Event.h b/tinySIP/include/tinysip/headers/tsip_header_Event.h
new file mode 100644
index 0000000..35eb8ea
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Event.h
@@ -0,0 +1,72 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Event.h
+ * @brief SIP header 'Event/o'as per RFC 3265.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_EVENT_H_
+#define _TSIP_HEADER_EVENT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_EVENT_VA_ARGS(package) tsip_header_Event_def_t, (const char*)package
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Event/o' .
+///
+/// @par ABNF: Event / o
+/// Event = ( "Event" / "o" ) HCOLON event-type *( SEMI event-param )
+/// event-type = event-package *( "." event-template )
+/// event-package = token-nodot
+/// event-template = token-nodot
+/// token-nodot = 1*( alphanum / "-" / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
+/// event-param = generic-param / ( "id" EQUAL token ) / call-ident / from-tag / to-tag / with-sessd
+/// call-ident = "call-id" EQUAL ( token / DQUOTE callid DQUOTE )
+/// with-sessd = "include-session-description"
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Event_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *package;
+}
+tsip_header_Event_t;
+
+TINYSIP_API tsip_header_Event_t* tsip_header_Event_create(const char* package);
+
+TINYSIP_API tsip_header_Event_t *tsip_header_Event_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Event_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_EVENT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Expires.h b/tinySIP/include/tinysip/headers/tsip_header_Expires.h
new file mode 100644
index 0000000..2242b9f
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Expires.h
@@ -0,0 +1,67 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Expires.h
+ * @brief SIP header 'Expires'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_EXPIRES_H_
+#define _TSIP_HEADER_EXPIRES_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_EXPIRES_VA_ARGS(delta_seconds) tsip_header_Expires_def_t, (int64_t)delta_seconds
+
+#define TSIP_HEADER_EXPIRES_NONE -1
+#define TSIP_HEADER_EXPIRES_DEFAULT 600000
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Expires'.
+///
+/// @par ABNF: Expires = "Expires" HCOLON delta-seconds
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Expires_s
+{
+ TSIP_DECLARE_HEADER;
+
+ int64_t delta_seconds;
+}
+tsip_header_Expires_t;
+
+TINYSIP_API tsip_header_Expires_t* tsip_header_Expires_create(int64_t delta_seconds);
+
+TINYSIP_API tsip_header_Expires_t *tsip_header_Expires_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Expires_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_EXPIRES_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_From.h b/tinySIP/include/tinysip/headers/tsip_header_From.h
new file mode 100644
index 0000000..a799efd
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_From.h
@@ -0,0 +1,69 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_From.h
+ * @brief SIP header 'From'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_FROM_H_
+#define _TSIP_HEADER_FROM_H_
+
+#include "tinysip_config.h"
+#include "tinysip/tsip_uri.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_FROM_VA_ARGS(display_name, uri, tag) tsip_header_From_def_t, (const char*)display_name, (const tsip_uri_t*)uri, (const char*)tag
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'From' .
+///
+/// @par ABNF: From = ( "From" / "f" ) HCOLON from-spec
+/// from-spec = ( name-addr / addr-spec ) *( SEMI from-param )
+/// from-param = tag-param / generic-param
+/// tag-param = "tag" EQUAL token
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_From_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+ char *tag;
+}
+tsip_header_From_t;
+
+TINYSIP_API tsip_header_From_t* tsip_header_From_create(const char* display_name, const tsip_uri_t* uri, const char* tag);
+
+TINYSIP_API tsip_header_From_t *tsip_header_From_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_From_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_FROM_H_ */
diff --git a/tinySIP/include/tinysip/headers/tsip_header_History_Info.h b/tinySIP/include/tinysip/headers/tsip_header_History_Info.h
new file mode 100644
index 0000000..6638f14
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_History_Info.h
@@ -0,0 +1,56 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_History_Info.h
+ * @brief SIP header 'History-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_HISTORY_INFO_H_
+#define _TSIP_HEADER_HISTORY_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'History-Info' .
+/// @author Mamadou
+/// @date 12/3/2009
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_History_Info_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_History_Info_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_HISTORY_INFO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Identity.h b/tinySIP/include/tinysip/headers/tsip_header_Identity.h
new file mode 100644
index 0000000..8382d39
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Identity.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Identity.h
+ * @brief SIP header 'Identity'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_IDENTITY_H_
+#define _TSIP_HEADER_IDENTITY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Identity' .
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Identity_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Identity_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_IDENTITY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Identity_Info.h b/tinySIP/include/tinysip/headers/tsip_header_Identity_Info.h
new file mode 100644
index 0000000..1aa790b
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Identity_Info.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Identity_Info.h
+ * @brief SIP header 'Identity-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_IDENTITY_INFO_H_
+#define _TSIP_HEADER_IDENTITY_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Identity-Info'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Identity_Info_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Identity_Info_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_IDENTITY_INFO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_In_Reply_To.h b/tinySIP/include/tinysip/headers/tsip_header_In_Reply_To.h
new file mode 100644
index 0000000..90477c6
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_In_Reply_To.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_In_Reply_To.h
+ * @brief SIP header 'In-Reply-To'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_IN_REPLY_TO_H_
+#define _TSIP_HEADER_IN_REPLY_TO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'In-Reply-To'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_In_Reply_To_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_In_Reply_To_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_IN_REPLY_TO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Join.h b/tinySIP/include/tinysip/headers/tsip_header_Join.h
new file mode 100644
index 0000000..ef4c042
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Join.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Join.h
+ * @brief SIP header 'Join'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_JOIN_H_
+#define _TSIP_HEADER_JOIN_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Join'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Join_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Join_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_JOIN_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_MIME_Version.h b/tinySIP/include/tinysip/headers/tsip_header_MIME_Version.h
new file mode 100644
index 0000000..439f98c
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_MIME_Version.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_MIME_Version.h
+ * @brief SIP header 'MIME-Version'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_MIME_VERSION_H_
+#define _TSIP_HEADER_MIME_VERSION_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'MIME-Version'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_MIME_Version_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_MIME_Version_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_MIME_VERSION_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Max_Forwards.h b/tinySIP/include/tinysip/headers/tsip_header_Max_Forwards.h
new file mode 100644
index 0000000..17d9856
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Max_Forwards.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Max_Forwards.h
+ * @brief SIP header 'Max-Forwards'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_MAX_FORWARDS_H_
+#define _TSIP_HEADER_MAX_FORWARDS_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_MAX_FORWARDS_VA_ARGS(max) tsip_header_Max_Forwards_def_t, (int32_t) max
+
+#define TSIP_HEADER_MAX_FORWARDS_NONE -1
+#define TSIP_HEADER_MAX_FORWARDS_DEFAULT 70
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Max-Forwards'.
+///
+/// @par ABNF: Max-Forwards = "Max-Forwards" HCOLON 1*DIGIT
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Max_Forwards_s
+{
+ TSIP_DECLARE_HEADER;
+
+ int32_t value;
+}
+tsip_header_Max_Forwards_t;
+
+TINYSIP_API tsip_header_Max_Forwards_t* tsip_header_Max_Forwards_create(int32_t max);
+
+TINYSIP_API tsip_header_Max_Forwards_t *tsip_header_Max_Forwards_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Max_Forwards_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_MAX_FORWARDS_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Min_Expires.h b/tinySIP/include/tinysip/headers/tsip_header_Min_Expires.h
new file mode 100644
index 0000000..042a190
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Min_Expires.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Min_Expires.h
+ * @brief SIP header 'Min-Expires'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_MIN_EXPIRES_H_
+#define _TSIP_HEADER_MIN_EXPIRES_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_MIN_EXPIRES_VA_ARGS(value) tsip_header_Min_Expires_def_t, (int32_t) value
+
+#define TSIP_HEADER_MIN_EXPIRES_NONE -1
+#define TSIP_HEADER_MIN_EXPIRES_DEFAULT 30
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Min-Expires' as per RFC 3261.
+///
+/// @par ABNF: Min-Expires = "Min-Expires" HCOLON delta-seconds
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Min_Expires_s
+{
+ TSIP_DECLARE_HEADER;
+
+ int32_t value;
+}
+tsip_header_Min_Expires_t;
+
+TINYSIP_API tsip_header_Min_Expires_t* tsip_header_Min_Expires_create(int32_t value);
+TINYSIP_API tsip_header_Min_Expires_t* tsip_header_Min_Expires_create_null();
+
+TINYSIP_API tsip_header_Min_Expires_t *tsip_header_Min_Expires_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Min_Expires_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_MIN_EXPIRES_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Min_SE.h b/tinySIP/include/tinysip/headers/tsip_header_Min_SE.h
new file mode 100644
index 0000000..de05338
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Min_SE.h
@@ -0,0 +1,67 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Min_SE.h
+ * @brief SIP header 'Min-SE'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_MIN_SE_H_
+#define _TSIP_HEADER_MIN_SE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_MIN_SE_VA_ARGS(delta_seconds) tsip_header_Min_SE_def_t, (int64_t)delta_seconds
+
+#define TSIP_SESSION_EXPIRES_MIN_VALUE 90
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Min-SE'.
+///
+/// @par ABNF : Min-SE = "Min-SE" HCOLON delta-seconds *(SEMI generic-param)
+///
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Min_SE_s
+{
+ TSIP_DECLARE_HEADER;
+
+ int64_t delta_seconds;
+}
+tsip_header_Min_SE_t;
+
+TINYSIP_API tsip_header_Min_SE_t* tsip_header_Min_SE_create(int64_t delta_seconds);
+
+TINYSIP_API tsip_header_Min_SE_t *tsip_header_Min_SE_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Min_SE_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_MIN_SE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Organization.h b/tinySIP/include/tinysip/headers/tsip_header_Organization.h
new file mode 100644
index 0000000..8351afb
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Organization.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Organization.h
+ * @brief SIP header 'Organization'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ORGANIZATION_H_
+#define _TSIP_HEADER_ORGANIZATION_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Organization'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Organization_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Organization_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ORGANIZATION_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Access_Network_Info.h b/tinySIP/include/tinysip/headers/tsip_header_P_Access_Network_Info.h
new file mode 100644
index 0000000..9508424
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Access_Network_Info.h
@@ -0,0 +1,71 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Access_Network_Info.h
+ * @brief SIP header 'P-Access-Network-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_ACCESS_NETWORK_INFO_H_
+#define _TSIP_HEADER_P_ACCESS_NETWORK_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_P_ACCESS_NETWORK_INFO_VA_ARGS(value) tsip_header_P_Access_Network_Info_def_t, (const char*)value
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Access-Network-Info' as per RFC 3455.
+///
+/// @par ABNF: P-Access-Network-Info = "P-Access-Network-Info" HCOLON access-net-spec
+/// access-net-spec = access-type *( SEMI access-info )
+/// access-type = "IEEE-802.11a" / "IEEE-802.11b" / "3GPP-GERAN" / "3GPP-UTRAN-FDD" / "3GPP-UTRAN-TDD" / "3GPP-CDMA2000" / token
+/// access-info = cgi-3gpp / utran-cell-id-3gpp / extension-access-info
+/// extension-access-info = gen-value
+/// cgi-3gpp = "cgi-3gpp" EQUAL (token / quoted-string)
+/// utran-cell-id-3gpp = "utran-cell-id-3gpp" EQUAL (token / quoted-string)
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Access_Network_Info_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *value;
+}
+tsip_header_P_Access_Network_Info_t;
+
+TINYSIP_API tsip_header_P_Access_Network_Info_t* tsip_header_P_Access_Network_Info_create(const char* value);
+TINYSIP_API tsip_header_P_Access_Network_Info_t* tsip_header_P_Access_Network_Info_create_null();
+
+TINYSIP_API tsip_header_P_Access_Network_Info_t *tsip_header_P_Access_Network_Info_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_P_Access_Network_Info_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_ACCESS_NETWORK_INFO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Answer_State.h b/tinySIP/include/tinysip/headers/tsip_header_P_Answer_State.h
new file mode 100644
index 0000000..e378ef7
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Answer_State.h
@@ -0,0 +1,53 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Answer_State.h
+ * @brief SIP header 'P-Answer-State'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_ANSWER_STATE_H_
+#define _TSIP_HEADER_P_ANSWER_STATE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Answer-State'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Answer_State_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_Answer_State_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_ANSWER_STATE_H_ */
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Asserted_Identity.h b/tinySIP/include/tinysip/headers/tsip_header_P_Asserted_Identity.h
new file mode 100644
index 0000000..3e2118a
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Asserted_Identity.h
@@ -0,0 +1,70 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Asserted_Identity.h
+ * @brief SIP header 'P-Asserted-Identity' as per RFC 3325.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_ASSERTED_IDENTITY_H_
+#define _TSIP_HEADER_P_ASSERTED_IDENTITY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/tsip_uri.h"
+
+TSIP_BEGIN_DECLS
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Asserted-Identity' as per RFC 3325.
+///
+/// @par ABNF: P-Asserted-Identity = PAssertedID
+/// PAssertedID = "P-Asserted-Identity" HCOLON PAssertedID-value *(COMMA PAssertedID-value)
+/// PAssertedID-value = name-addr / addr-spec
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Asserted_Identity_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+}
+tsip_header_P_Asserted_Identity_t;
+
+typedef tsk_list_t tsip_header_P_Asserted_Identities_L_t;
+
+TINYSIP_API tsip_header_P_Asserted_Identity_t* tsip_header_P_Asserted_Identity_create();
+
+TINYSIP_API tsip_header_P_Asserted_Identities_L_t *tsip_header_P_Asserted_Identity_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_P_Asserted_Identity_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_ASSERTED_IDENTITY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Associated_URI.h b/tinySIP/include/tinysip/headers/tsip_header_P_Associated_URI.h
new file mode 100644
index 0000000..8c28f41
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Associated_URI.h
@@ -0,0 +1,72 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Associated_URI.h
+ * @brief SIP header 'P-Associated-URI'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_ASSOCIATED_URI_H_
+#define _TSIP_HEADER_P_ASSOCIATED_URI_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/tsip_uri.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_P_ASSOCIATED_URI_VA_ARGS(uri) tsip_header_P_Associated_URI_def_t, (const tsip_uri_t*)uri
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Associated-URI' as per RFC 3455.
+///
+/// @par ABNF: P-Associated-URI = "P-Associated-URI" HCOLON p-aso-uri-spec *(COMMA p-aso-uri-spec)
+/// p-aso-uri-spec = name-addr *( SEMI ai-param )
+/// ai-param = generic-param
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Associated_URI_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+}
+tsip_header_P_Associated_URI_t;
+
+typedef tsk_list_t tsip_header_P_Associated_URIs_L_t;
+
+TINYSIP_API tsip_header_P_Associated_URI_t* tsip_header_P_Associated_URI_create(const tsip_uri_t* uri);
+TINYSIP_API tsip_header_P_Associated_URI_t* tsip_header_P_Associated_URI_create_null();
+
+TINYSIP_API tsip_header_P_Associated_URIs_L_t *tsip_header_P_Associated_URI_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_P_Associated_URI_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_ASSOCIATED_URI_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Called_Party_ID.h b/tinySIP/include/tinysip/headers/tsip_header_P_Called_Party_ID.h
new file mode 100644
index 0000000..324b61a
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Called_Party_ID.h
@@ -0,0 +1,53 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Called_Party_ID.h
+ * @brief SIP header 'P-Called-Party-ID'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_CALLED_PARTY_ID_H_
+#define _TSIP_HEADER_P_CALLED_PARTY_ID_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Called-Party-ID'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Called_Party_ID_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_Called_Party_ID_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_CALLED_PARTY_ID_H_ */ \ No newline at end of file
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Charging_Function_Addresses.h b/tinySIP/include/tinysip/headers/tsip_header_P_Charging_Function_Addresses.h
new file mode 100644
index 0000000..82e5e71
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Charging_Function_Addresses.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Charging_Function_Addresses.h
+ * @brief SIP header 'P-Charging-Function-Addresses'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_CHARGING_FUNCTION_ADDRESSES_H_
+#define _TSIP_HEADER_P_CHARGING_FUNCTION_ADDRESSES_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Charging-Function-Addresses' as per RFC 3455.
+///
+/// @par ABNF: P-Charging-Function-Addresses = P-Charging-Addr
+/// P-Charging-Addr = "P-Charging-Function-Addresses" HCOLON charge-addr-params *( SEMI charge-addr-params )
+/// charge-addr-params = ccf / ecf / generic-param
+/// ccf = "ccf" EQUAL gen-value
+/// ecf = "ecf" EQUAL gen-value
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Charging_Function_Addresses_s
+{
+ TSIP_DECLARE_HEADER;
+ char* ccf;
+ char* ecf;
+}
+tsip_header_P_Charging_Function_Addresses_t;
+
+typedef tsk_list_t tsip_header_P_Charging_Function_Addressess_L_t;
+
+TINYSIP_API tsip_header_P_Charging_Function_Addresses_t* tsip_header_P_Charging_Function_Addresses_create();
+
+TINYSIP_API tsip_header_P_Charging_Function_Addressess_L_t *tsip_header_P_Charging_Function_Addresses_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_P_Charging_Function_Addresses_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_CHARGING_FUNCTION_ADDRESSES_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Charging_Vector.h b/tinySIP/include/tinysip/headers/tsip_header_P_Charging_Vector.h
new file mode 100644
index 0000000..45ba24d
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Charging_Vector.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Charging_Vector.h
+ * @brief SIP header 'P-Charging-Vector'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_CHARGING_VECTOR_H_
+#define _TSIP_HEADER_P_CHARGING_VECTOR_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Charging-Vector'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Charging_Vector_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_Charging_Vector_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_CHARGING_VECTOR_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Billing_Info.h b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Billing_Info.h
new file mode 100644
index 0000000..ca518b9
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Billing_Info.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_DCS_Billing_Info.h
+ * @brief SIP header 'P-DCS-Billing-Info'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_DCS_BILLING_INFO_H_
+#define _TSIP_HEADER_P_DCS_BILLING_INFO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-DCS-Billing-Info'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_DCS_Billing_Info_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_DCS_Billing_Info_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_DCS_BILLING_INFO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_DCS_LAES.h b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_LAES.h
new file mode 100644
index 0000000..ed2ce31
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_LAES.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_DCS_LAES.h
+ * @brief SIP header 'P-DCS-LAES'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_DCS_LAES_H_
+#define _TSIP_HEADER_P_DCS_LAES_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-DCS-_LAES'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_DCS_LAES_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_DCS_LAES_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_DCS_LAES_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_DCS_OSPS.h b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_OSPS.h
new file mode 100644
index 0000000..1d98390
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_OSPS.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_DCS_OSPS.h
+ * @brief SIP header 'P-DCS-OSPS'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_DCS_OSPS_H_
+#define _TSIP_HEADER_P_DCS_OSPS_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-DCS-OSPS'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_DCS_OSPS_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_DCS_OSPS_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_DCS_OSPS_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Redirect.h b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Redirect.h
new file mode 100644
index 0000000..103e396
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Redirect.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_DCS_Redirect.h
+ * @brief SIP header 'P-DCS-Redirect'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_DCS_REDIRECT_H_
+#define _TSIP_HEADER_P_DCS_REDIRECT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-DCS-Redirect'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_DCS_Redirect_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_DCS_Redirect_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_DCS_REDIRECT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Trace_Party_ID.h b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Trace_Party_ID.h
new file mode 100644
index 0000000..3a11086
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_DCS_Trace_Party_ID.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_DCS_Trace_Party_ID.h
+ * @brief SIP header 'P-DCS-Trace-Party-ID'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_DCS_TRACE_PARTY_ID_H_
+#define _TSIP_HEADER_P_DCS_TRACE_PARTY_ID_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-DCS-Trace-Party-ID'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_DCS_Trace_Party_ID_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_DCS_Trace_Party_ID_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_DCS_TRACE_PARTY_ID_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Early_Media.h b/tinySIP/include/tinysip/headers/tsip_header_P_Early_Media.h
new file mode 100644
index 0000000..54890f0
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Early_Media.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Early_Media.h
+ * @brief SIP header 'P-Early-Media'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_EARLY_MEDIA_H_
+#define _TSIP_HEADER_P_EARLY_MEDIA_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Early-Media'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Early_Media_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_Early_Media_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_EARLY_MEDIA_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Media_Authorization.h b/tinySIP/include/tinysip/headers/tsip_header_P_Media_Authorization.h
new file mode 100644
index 0000000..c161c34
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Media_Authorization.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Media_Authorization.h
+ * @brief SIP header 'P-Media-Authorization'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_MEDIA_AUTHORIZATION_H_
+#define _TSIP_HEADER_P_MEDIA_AUTHORIZATION_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Media-Authorization'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Media_Authorization_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_Media_Authorization_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_MEDIA_AUTHORIZATION_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Preferred_Identity.h b/tinySIP/include/tinysip/headers/tsip_header_P_Preferred_Identity.h
new file mode 100644
index 0000000..9272932
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Preferred_Identity.h
@@ -0,0 +1,69 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Preferred_Identity.h
+ * @brief SIP header 'P-Preferred-Identity'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_PREFERRED_IDENTITY_H_
+#define _TSIP_HEADER_P_PREFERRED_IDENTITY_H_
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_uri.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_P_PREFERRED_IDENTITY_VA_ARGS(uri) tsip_header_P_Preferred_Identity_def_t, (const tsip_uri_t*)uri
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Preferred-Identity' as per RFC 3325.
+///
+/// @par ABNF: PPreferredID = "P-Preferred-Identity" HCOLON PPreferredID-value *(COMMA PPreferredID-value)
+/// PPreferredID-value = name-addr / addr-spec
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Preferred_Identity_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsip_uri_t *uri;
+ char *display_name;
+}
+tsip_header_P_Preferred_Identity_t;
+
+TINYSIP_API tsip_header_P_Preferred_Identity_t* tsip_header_P_Preferred_Identity_create(const tsip_uri_t* uri);
+TINYSIP_API tsip_header_P_Preferred_Identity_t* tsip_header_P_Preferred_Identity_create_null();
+
+TINYSIP_API tsip_header_P_Preferred_Identity_t *tsip_header_P_Preferred_Identity_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_P_Preferred_Identity_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_PREFERRED_IDENTITY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Profile_Key.h b/tinySIP/include/tinysip/headers/tsip_header_P_Profile_Key.h
new file mode 100644
index 0000000..0f33a2a
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Profile_Key.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Profile_Key.h
+ * @brief SIP header 'P-Profile-Key'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_PROFILE_KEY_H_
+#define _TSIP_HEADER_P_PROFILE_KEY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Profile-Key'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Profile_Key_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_Profile_Key_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_PROFILE_KEY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_User_Database.h b/tinySIP/include/tinysip/headers/tsip_header_P_User_Database.h
new file mode 100644
index 0000000..75915b5
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_User_Database.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_User_Database.h
+ * @brief SIP header 'P-User-Database'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_USER_DATABASE_H_
+#define _TSIP_HEADER_P_USER_DATABASE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-User-Database'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_User_Database_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_User_Database_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_USER_DATABASE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_P_Visited_Network_ID.h b/tinySIP/include/tinysip/headers/tsip_header_P_Visited_Network_ID.h
new file mode 100644
index 0000000..121783f
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_P_Visited_Network_ID.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_P_Visited_Network_ID.h
+ * @brief SIP header 'P-Visited-Network-ID'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_P_VISITED_NETWORK_ID_H_
+#define _TSIP_HEADER_P_VISITED_NETWORK_ID_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'P-Visited-Network-ID'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_P_Visited_Network_ID_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_P_Visited_Network_ID_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_P_VISITED_NETWORK_ID_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Path.h b/tinySIP/include/tinysip/headers/tsip_header_Path.h
new file mode 100644
index 0000000..d0fa6ed
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Path.h
@@ -0,0 +1,72 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Path.h
+ * @brief SIP header 'Path'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_PATH_H_
+#define _TSIP_HEADER_PATH_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/tsip_uri.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_PATH_VA_ARGS(uri) tsip_header_Path_def_t, (const tsip_uri_t*)uri
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Path' as per RFC 3327.
+///
+/// @par ABNF : Path = "Path" HCOLON path-value *(COMMA path-value)
+/// path-value = name-addr *( SEMI rr-param )
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Path_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+}
+tsip_header_Path_t;
+
+typedef tsk_list_t tsip_header_Paths_L_t;
+
+TINYSIP_API tsip_header_Path_t* tsip_header_Path_create(const tsip_uri_t* uri);
+TINYSIP_API tsip_header_Path_t* tsip_header_Path_create_null();
+
+TINYSIP_API tsip_header_Paths_L_t *tsip_header_Path_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Path_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_PATH_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Priority.h b/tinySIP/include/tinysip/headers/tsip_header_Priority.h
new file mode 100644
index 0000000..eb1cbbf
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Priority.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Priority.h
+ * @brief SIP header 'Priority'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_PRIORITY_H_
+#define _TSIP_HEADER_PRIORITY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Priority'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Priority_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Priority_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_PRIORITY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Privacy.h b/tinySIP/include/tinysip/headers/tsip_header_Privacy.h
new file mode 100644
index 0000000..421e18f
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Privacy.h
@@ -0,0 +1,65 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Privacy.h
+ * @brief SIP header 'Privacy'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_PRIVACY_H_
+#define _TSIP_HEADER_PRIVACY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Privacy' as per RFC 3323.
+///
+/// @par ABNF: Privacy = Privacy-hdr
+/// Privacy-hdr = "Privacy" HCOLON priv-value *(";" priv-value)
+/// priv-value = "header" / "session" / "user" / "none" / "critical" / "id" / "history" / token
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Privacy_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsk_strings_L_t *values;
+}
+tsip_header_Privacy_t;
+
+TINYSIP_API tsip_header_Privacy_t* tsip_header_Privacy_create();
+
+TINYSIP_API tsip_header_Privacy_t *tsip_header_Privacy_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Privacy_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_PRIVACY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Proxy_Authenticate.h b/tinySIP/include/tinysip/headers/tsip_header_Proxy_Authenticate.h
new file mode 100644
index 0000000..01c4681
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Proxy_Authenticate.h
@@ -0,0 +1,77 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Proxy_Authenticate.h
+ * @brief SIP header 'Proxy-Authenticate'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_PROXY_AUTHENTICATE_H_
+#define _TSIP_HEADER_PROXY_AUTHENTICATE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Proxy-Authenticate'.
+///
+/// @par ABNF = Proxy-Authenticate = "Proxy-Authenticate" HCOLON challenge
+/// challenge = ("Digest" LWS digest-cln *(COMMA digest-cln)) / other-challenge
+/// other-challenge = auth-scheme / auth-param *(COMMA auth-param)
+/// digest-cln = realm / domain / nonce / opaque / stale / algorithm / qop-options / auth-param
+/// realm = "realm" EQUAL realm-value
+/// realm-value = quoted-string
+/// domain = "domain" EQUAL LDQUOT URI *( 1*SP URI ) RDQUOT
+/// URI = absoluteURI / abs-path
+/// opaque = "opaque" EQUAL quoted-string
+/// stale = "stale" EQUAL ( "true" / "false" )
+/// qop-options = "qop" EQUAL LDQUOT qop-value *("," qop-value) RDQUOT
+/// qop-value = "auth" / "auth-int" / token
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Proxy_Authenticate_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char* scheme;
+ char* realm;
+ char* domain;
+ char* nonce;
+ char* opaque;
+ tsk_bool_t stale;
+ char* algorithm;
+ char* qop;
+}
+tsip_header_Proxy_Authenticate_t;
+
+tsip_header_Proxy_Authenticate_t *tsip_header_Proxy_Authenticate_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Proxy_Authenticate_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_PROXY_AUTHENTICATE_H_ */
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Proxy_Authorization.h b/tinySIP/include/tinysip/headers/tsip_header_Proxy_Authorization.h
new file mode 100644
index 0000000..6eb7136
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Proxy_Authorization.h
@@ -0,0 +1,96 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Proxy_Authorization.h
+ * @brief SIP header 'Proxy-Authorization'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_PROXY_AUTHORIZATION_H_
+#define _TSIP_HEADER_PROXY_AUTHORIZATION_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Proxy-Authorization'.
+///
+/// @par ABNF = "Proxy-Authorization" HCOLON credentials
+/// credentials = ("Digest" LWS digest-response) / other-response
+/// digest-response = dig-resp *(COMMA dig-resp)
+/// dig-resp = username / realm / nonce / digest-uri / dresponse / algorithm / cnonce / opaque / message-qop / nonce-count / auth-param / auts
+/// username = "username" EQUAL username-value
+/// username-value = quoted-string
+/// digest-uri = "uri" EQUAL LDQUOT digest-uri-value RDQUOT
+/// digest-uri-value = auth-request-uri ; equal to request-uri as specified by HTTP/1.1
+/// message-qop = "qop" EQUAL qop-value
+/// cnonce = "cnonce" EQUAL cnonce-value
+/// cnonce-value = nonce-value
+/// nonce-count = "nc" EQUAL nc-value
+/// nc-value = 8LHEX
+/// dresponse = "response" EQUAL request-digest
+/// request-digest = LDQUOT 32LHEX RDQUOT
+/// auth-request-uri = not-defined
+///
+/// auth-param = auth-param-name EQUAL ( token / quoted-string )
+/// auth-param-name = token
+///
+/// other-response = auth-scheme LWS auth-param *(COMMA auth-param)
+/// auth-scheme = token
+/// auts = "auts" EQUAL auts-param
+/// auts-param = LDQUOT auts-value RDQUOT
+/// auts-value = [base64 encoding of AUTS]
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Proxy_Authorization_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char* scheme;
+ char* username;
+ char* realm;
+ char* nonce;
+ char* uri;
+ char* response;
+ char* algorithm;
+ char* cnonce;
+ char* opaque;
+ char* qop;
+ char* nc;
+}
+tsip_header_Proxy_Authorization_t;
+
+TINYSIP_API tsip_header_Proxy_Authorization_t* tsip_header_Proxy_Authorization_create();
+
+TINYSIP_API tsip_header_Proxy_Authorization_t *tsip_header_Proxy_Authorization_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Proxy_Authorization_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_PROXY_AUTHORIZATION_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Proxy_Require.h b/tinySIP/include/tinysip/headers/tsip_header_Proxy_Require.h
new file mode 100644
index 0000000..63f74e4
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Proxy_Require.h
@@ -0,0 +1,66 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Proxy_Require.h
+ * @brief SIP header 'Proxy-Require'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_PROXY_REQUIRE_H_
+#define _TSIP_HEADER_PROXY_REQUIRE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_PROXY_REQUIRE_VA_ARGS(option) tsip_header_Proxy_Require_def_t, (const char*)option
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Proxy-Proxy_Require'.
+///
+/// @par ABNF: Proxy_Require = "Proxy_Require" HCOLON option-tag *(COMMA option-tag)
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Proxy_Require_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsk_strings_L_t *options;
+}
+tsip_header_Proxy_Require_t;
+
+TINYSIP_API tsip_header_Proxy_Require_t* tsip_header_Proxy_Require_create(const char* option);
+TINYSIP_API tsip_header_Proxy_Require_t* tsip_header_Proxy_Require_create_null();
+
+TINYSIP_API tsip_header_Proxy_Require_t *tsip_header_Proxy_Require_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Proxy_Require_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_PROXY_REQUIRE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_RAck.h b/tinySIP/include/tinysip/headers/tsip_header_RAck.h
new file mode 100644
index 0000000..6a2bc13
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_RAck.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_RAck.h
+ * @brief SIP header 'RAck'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_RACK_H_
+#define _TSIP_HEADER_RACK_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_RACK_VA_ARGS(seq, cseq, method) tsip_header_RAck_def_t, (uint32_t)seq, (uint32_t)cseq, (const char*)method
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'RAck' as per RFC 3262.
+///
+/// @par ABNF : "RAck" HCOLON response-num LWS CSeq-num LWS Method
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_RAck_s
+{
+ TSIP_DECLARE_HEADER;
+
+ uint32_t seq;
+ uint32_t cseq;
+ char* method;
+}
+tsip_header_RAck_t;
+
+
+TINYSIP_API tsip_header_RAck_t* tsip_header_RAck_create(uint32_t seq, uint32_t cseq, const char* method);
+TINYSIP_API tsip_header_RAck_t* tsip_header_RAck_create_null();
+
+TINYSIP_API tsip_header_RAck_t *tsip_header_RAck_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_RAck_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_RACK_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_RSeq.h b/tinySIP/include/tinysip/headers/tsip_header_RSeq.h
new file mode 100644
index 0000000..1b87ddd
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_RSeq.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_RSeq.h
+ * @brief SIP header 'RSeq'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_RSEQ_H_
+#define _TSIP_HEADER_RSEQ_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_RSEQ_VA_ARGS(seq) tsip_header_RSeq_def_t, (int32_t) seq
+
+#define TSIP_HEADER_RSEQ_NONE 0
+#define TSIP_HEADER_RSEQ_DEFAULT 1
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'RSeq' as per RFC 3262.
+///
+/// @par ABNF: "RSeq" HCOLON response-num
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_RSeq_s
+{
+ TSIP_DECLARE_HEADER;
+ uint32_t seq;
+}
+tsip_header_RSeq_t;
+
+
+TINYSIP_API tsip_header_RSeq_t* tsip_header_RSeq_create(uint32_t seq);
+TINYSIP_API tsip_header_RSeq_t* tsip_header_RSeq_create_null();
+
+TINYSIP_API tsip_header_RSeq_t *tsip_header_RSeq_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_RSeq_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_RSEQ_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Reason.h b/tinySIP/include/tinysip/headers/tsip_header_Reason.h
new file mode 100644
index 0000000..eb13b51
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Reason.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Reason.h
+ * @brief SIP header 'Reason'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REASON_H_
+#define _TSIP_HEADER_REASON_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Reason'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Reason_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Reason_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REASON_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Record_Route.h b/tinySIP/include/tinysip/headers/tsip_header_Record_Route.h
new file mode 100644
index 0000000..7e8e187
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Record_Route.h
@@ -0,0 +1,73 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Record_Route.h
+ * @brief SIP header 'Record-Route'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_RECORD_ROUTE_H_
+#define _TSIP_HEADER_RECORD_ROUTE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/tsip_uri.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_RECORD_ROUTE_VA_ARGS(uri) tsip_header_Record_Route_def_t, (const tsip_uri_t*)uri
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Record-Route'.
+///
+/// @par ABNF : Record-Route = "Record-Route" HCOLON rec-route *(COMMA rec-route)
+/// rec-route = name-addr *( SEMI rr-param )
+/// rr-param = generic-param
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Record_Route_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char* display_name;
+ tsip_uri_t *uri;
+}
+tsip_header_Record_Route_t;
+
+typedef tsk_list_t tsip_header_Record_Routes_L_t;
+
+TINYSIP_API tsip_header_Record_Route_t* tsip_header_Record_Route_create(const tsip_uri_t* uri);
+TINYSIP_API tsip_header_Record_Route_t* tsip_header_Record_Route_create_null();
+
+TINYSIP_API tsip_header_Record_Routes_L_t *tsip_header_Record_Route_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Record_Route_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_RECORD_ROUTE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Refer_Sub.h b/tinySIP/include/tinysip/headers/tsip_header_Refer_Sub.h
new file mode 100644
index 0000000..d436430
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Refer_Sub.h
@@ -0,0 +1,67 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Refer_Sub.h
+ * @brief SIP header 'Refer-Sub' as per 4488.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REFER_SUB_H_
+#define _TSIP_HEADER_REFER_SUB_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_REFER_SUB_VA_ARGS(sub) tsip_header_Refer_Sub_def_t, (tsk_bool_t)sub
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Refer-Sub'.
+///
+/// @par ABNF : Refer-Sub = "Refer-Sub" HCOLON refer-sub-value *(SEMI exten)
+/// refer-sub-value = "true" / "false"
+/// exten = generic-param
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Refer_Sub_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsk_bool_t sub;
+}
+tsip_header_Refer_Sub_t;
+
+TINYSIP_API tsip_header_Refer_Sub_t* tsip_header_Refer_Sub_create(tsk_bool_t sub);
+TINYSIP_API tsip_header_Refer_Sub_t* tsip_header_Refer_Sub_create_null();
+
+TINYSIP_API tsip_header_Refer_Sub_t *tsip_header_Refer_Sub_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Refer_Sub_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REFER_SUB_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Refer_To.h b/tinySIP/include/tinysip/headers/tsip_header_Refer_To.h
new file mode 100644
index 0000000..f68ecd9
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Refer_To.h
@@ -0,0 +1,69 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Refer_To.h
+ * @brief SIP Refer-To header as per RFC 3515.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REFER_TO_H_
+#define _TSIP_HEADER_REFER_TO_H_
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_uri.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_REFER_TO_VA_ARGS(uri) tsip_header_Refer_To_def_t, (const tsip_uri_t*)uri
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Refer-To' .
+///
+/// @par ABNF: Refer-To = ( "Refer-To" / "r" ) HCOLON ( name-addr / addr-spec ) *(SEMI refer-param)
+/// refer-param = generic-param / feature-param
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Refer_To_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+}
+tsip_header_Refer_To_t;
+
+TSIP_END_DECLS
+
+TINYSIP_API tsip_header_Refer_To_t* tsip_header_Refer_To_create(const tsip_uri_t* uri);
+TINYSIP_API tsip_header_Refer_To_t* tsip_header_Refer_To_create_null();
+
+TINYSIP_API tsip_header_Refer_To_t *tsip_header_Refer_To_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Refer_To_def_t;
+
+#endif /* _TSIP_HEADER_REFER_TO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Referred_By.h b/tinySIP/include/tinysip/headers/tsip_header_Referred_By.h
new file mode 100644
index 0000000..5870512
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Referred_By.h
@@ -0,0 +1,70 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Referred_By.h
+ * @brief SIP Referred-By header as per RFC 3892.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REFERRED_BY_H_
+#define _TSIP_HEADER_REFERRED_BY_H_
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_uri.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_REFERRED_BY_VA_ARGS(uri, cid) tsip_header_Referred_By_def_t, (const tsip_uri_t*)uri, (const char*)cid
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Referred-By'.
+///
+/// @par ABNF: Referred-By = ( "Referred-By" / "b" ) HCOLON referrer-uri *( SEMI (referredby-id-param / generic-param) )
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Referred_By_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+
+ char* cid;
+}
+tsip_header_Referred_By_t;
+
+TINYSIP_API tsip_header_Referred_By_t* tsip_header_Referred_By_create(const tsip_uri_t* uri, const char* cid);
+TINYSIP_API tsip_header_Referred_By_t* tsip_header_Referred_By_create_null();
+
+TINYSIP_API tsip_header_Referred_By_t *tsip_header_Referred_By_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Referred_By_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REFERRED_BY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Reject_Contact.h b/tinySIP/include/tinysip/headers/tsip_header_Reject_Contact.h
new file mode 100644
index 0000000..01bcf4f
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Reject_Contact.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Reject_Contact.h
+ * @brief SIP header 'Reject-Contact'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REJECT_CONTACT_H_
+#define _TSIP_HEADER_REJECT_CONTACT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Reject-Contact'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Reject_Contact_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Reject_Contact_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REJECT_CONTACT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Replaces.h b/tinySIP/include/tinysip/headers/tsip_header_Replaces.h
new file mode 100644
index 0000000..5889dd0
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Replaces.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Replaces.h
+ * @brief SIP header 'Replaces'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REPLACES_H_
+#define _TSIP_HEADER_REPLACES_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Replaces'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Replaces_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Replaces_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REPLACES_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Reply_To.h b/tinySIP/include/tinysip/headers/tsip_header_Reply_To.h
new file mode 100644
index 0000000..e5b97f1
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Reply_To.h
@@ -0,0 +1,53 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Reply_To.h
+ * @brief SIP header 'Reply_To'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REPLY_TO_H_
+#define _TSIP_HEADER_REPLY_TO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+/// @brief SIP header 'Reply_To'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Reply_To_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Reply_To_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REPLY_TO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Request_Disposition.h b/tinySIP/include/tinysip/headers/tsip_header_Request_Disposition.h
new file mode 100644
index 0000000..50d8615
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Request_Disposition.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Request_Disposition.h
+ * @brief SIP header 'Request-Disposition'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REQUEST_DISPOSITION_H_
+#define _TSIP_HEADER_REQUEST_DISPOSITION_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Request-Disposition'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Request_Disposition_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Request_Disposition_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REQUEST_DISPOSITION_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Require.h b/tinySIP/include/tinysip/headers/tsip_header_Require.h
new file mode 100644
index 0000000..01de563
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Require.h
@@ -0,0 +1,66 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Require.h
+ * @brief SIP header 'Require'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_REQUIRE_H_
+#define _TSIP_HEADER_REQUIRE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_REQUIRE_VA_ARGS(option) tsip_header_Require_def_t, (const char*)option
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Require'.
+///
+/// @par ABNF: Require = "Require" HCOLON option-tag *(COMMA option-tag)
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Require_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsk_strings_L_t *options;
+}
+tsip_header_Require_t;
+
+TINYSIP_API tsip_header_Require_t* tsip_header_Require_create(const char* option);
+TINYSIP_API tsip_header_Require_t* tsip_header_Require_create_null();
+
+TINYSIP_API tsip_header_Require_t *tsip_header_Require_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Require_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_REQUIRE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Resource_Priority.h b/tinySIP/include/tinysip/headers/tsip_header_Resource_Priority.h
new file mode 100644
index 0000000..24e83df
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Resource_Priority.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Resource_Priority.h
+ * @brief SIP header 'Resource-Priority'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_RESOURCE_PRIORITY_H_
+#define _TSIP_HEADER_RESOURCE_PRIORITY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Resource-Priority'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Resource_Priority_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Resource_Priority_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_RESOURCE_PRIORITY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Retry_After.h b/tinySIP/include/tinysip/headers/tsip_header_Retry_After.h
new file mode 100644
index 0000000..4761b5c
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Retry_After.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Retry_After.h
+ * @brief SIP header 'Retry-After'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_RETRY_AFTER_H_
+#define _TSIP_HEADER_RETRY_AFTER_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Retry-After'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Retry_After_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Retry_After_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_RETRY_AFTER_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Route.h b/tinySIP/include/tinysip/headers/tsip_header_Route.h
new file mode 100644
index 0000000..28e3c80
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Route.h
@@ -0,0 +1,72 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Route.h
+ * @brief SIP header 'Route'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ROUTE_H_
+#define _TSIP_HEADER_ROUTE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/tsip_uri.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_ROUTE_VA_ARGS(uri) tsip_header_Route_def_t, (const tsip_uri_t*)uri
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Route'.
+///
+/// @par ABNF : Route = "Route" HCOLON route-param *(COMMA route-param)
+/// route-param = name-addr *( SEMI rr-param )
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Route_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+}
+tsip_header_Route_t;
+
+typedef tsk_list_t tsip_header_Routes_L_t;
+
+TINYSIP_API tsip_header_Route_t* tsip_header_Route_create(const tsip_uri_t* uri);
+TINYSIP_API tsip_header_Route_t* tsip_header_Route_create_null();
+
+TINYSIP_API tsip_header_Routes_L_t *tsip_header_Route_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Route_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ROUTE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_SIP_ETag.h b/tinySIP/include/tinysip/headers/tsip_header_SIP_ETag.h
new file mode 100644
index 0000000..cf6ba6f
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_SIP_ETag.h
@@ -0,0 +1,66 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_SIP_ETag.h
+ * @brief SIP header 'SIP-ETag'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SIP_ETAG_H_
+#define _TSIP_HEADER_SIP_ETAG_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_SIP_ETAG_VA_ARGS(etag) tsip_header_SIP_ETag_def_t, (const char*)etag
+
+/**
+ * @struct tsip_header_SIP_ETag_s
+ *
+ * SIP header 'SIP-ETag' as per RFC 3903.
+ * @par ABNF
+ * SIP-ETag = "SIP-ETag" HCOLON entity-tag
+ * entity-tag = token
+**/
+typedef struct tsip_header_SIP_ETag_s
+{
+ TSIP_DECLARE_HEADER;
+ char *value;
+}
+tsip_header_SIP_ETag_t;
+
+TINYSIP_API tsip_header_SIP_ETag_t* tsip_header_SIP_ETag_create(const char* etag);
+TINYSIP_API tsip_header_SIP_ETag_t* tsip_header_SIP_ETag_create_null();
+
+TINYSIP_API tsip_header_SIP_ETag_t *tsip_header_SIP_ETag_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_SIP_ETag_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SIP_ETAG_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_SIP_If_Match.h b/tinySIP/include/tinysip/headers/tsip_header_SIP_If_Match.h
new file mode 100644
index 0000000..f918df4
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_SIP_If_Match.h
@@ -0,0 +1,67 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_SIP_If_Match.h
+ * @brief SIP header 'SIP-If-Match'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SIP_IF_MATCH_H_
+#define _TSIP_HEADER_SIP_IF_MATCH_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_SIP_IF_MATCH_VA_ARGS(etag) tsip_header_SIP_If_Match_def_t, (const char*)etag
+
+
+/**
+ * @struct tsip_header_SIP_If_Match_s
+ *
+ * SIP header 'SIP-If-Match' as per RFC 3903.
+ * @par ABNF
+ * SIP-If-Match = "SIP-If-Match" HCOLON entity-tag
+ * entity-tag = token
+**/
+typedef struct tsip_header_SIP_If_Match_s
+{
+ TSIP_DECLARE_HEADER;
+ char *value;
+}
+tsip_header_SIP_If_Match_t;
+
+TINYSIP_API tsip_header_SIP_If_Match_t* tsip_header_SIP_If_Match_create(const char* etag);
+TINYSIP_API tsip_header_SIP_If_Match_t* tsip_header_SIP_If_Match_create_null();
+
+TINYSIP_API tsip_header_SIP_If_Match_t *tsip_header_SIP_If_Match_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_SIP_If_Match_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SIP_IF_MATCH_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Security_Client.h b/tinySIP/include/tinysip/headers/tsip_header_Security_Client.h
new file mode 100644
index 0000000..d453832
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Security_Client.h
@@ -0,0 +1,111 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Security_Client.h
+ * @brief SIP header 'Security-Client' as per RFC 3329.
+ *
+
+ */
+#ifndef _TSIP_HEADER_SECURITY_CLIENT_H_
+#define _TSIP_HEADER_SECURITY_CLIENT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tnet_types.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_SECURITY_CLIENT_VA_ARGS(mech, alg, prot, mod, ealg, port_c, port_s, spi_c, spi_s) tsip_header_Security_Client_def_t, (const char*)mech, (const char*)alg, (const char*)prot, (const char*)mod, (const char*)ealg, (tnet_port_t)port_c, (tnet_port_t)port_s, (uint32_t)spi_c, (uint32_t)spi_s
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Security-Client' as per RFC 3329.
+///
+/// @par ABNF : Security-Client = "Security-Client" HCOLON sec-mechanism *(COMMA sec-mechanism)
+/// sec-mechanism = mechanism-name *( SEMI mech-parameters )
+/// mechanism-name = ( "digest" / "tls" / "ipsec-ike" / "ipsec-man" / token )
+/// mech-parameters = ( preference / digest-algorithm / digest-qop / digest-verify / mech-extension )
+/// preference = "q" EQUAL qvalue
+/// digest-algorithm = "d-alg" EQUAL token
+/// digest-qop = "d-qop" EQUAL token
+/// digest-verify = "d-ver" EQUAL LDQUOT 32LHEX RDQUOT
+/// mech-extension = generic-param
+///
+/// mechanism-name = ( "ipsec-3gpp" )
+/// mech-parameters = ( algorithm / protocol /mode /
+/// encrypt-algorithm / spi /
+/// port1 / port2 )
+/// algorithm = "alg" EQUAL ( "hmac-md5-96" /
+/// "hmac-sha-1-96" )
+/// protocol = "prot" EQUAL ( "ah" / "esp" )
+/// mode = "mod" EQUAL ( "trans" / "tun" )
+/// encrypt-algorithm = "ealg" EQUAL ( "des-ede3-cbc" / "null" )
+/// spi = "spi" EQUAL spivalue
+/// spivalue = 10DIGIT; 0 to 4294967295
+/// port1 = "port1" EQUAL port
+/// port2 = "port2" EQUAL port
+/// port = 1*DIGIT
+///
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Security_Client_s
+{
+ TSIP_DECLARE_HEADER;
+
+ //! sec-mechanism (e.g. "digest" / "tls" / "ipsec-3gpp")
+ char* mech;
+ //! algorithm (e.g. "hmac-md5-96" / "hmac-sha-1-96")
+ char* alg;
+ //! protocol (e.g. "ah" / "esp")
+ char* prot;
+ //! mode (e.g. "trans" / "tun")
+ char* mod;
+ //! encrypt-algorithm (e.g. "des-ede3-cbc" / "null")
+ char* ealg;
+ //! client port
+ tnet_port_t port_c;
+ //! server port
+ tnet_port_t port_s;
+ //! client spi
+ uint32_t spi_c;
+ //! server spi
+ uint32_t spi_s;
+ //! preference
+ double q;
+}
+tsip_header_Security_Client_t;
+
+typedef tsk_list_t tsip_header_Security_Clients_L_t;
+
+TINYSIP_API tsip_header_Security_Client_t* tsip_header_Security_Client_create(const char* mech, const char* alg, const char* prot, const char* mod, const char* ealg, tnet_port_t port_c, tnet_port_t port_s, uint32_t spi_c, uint32_t spi_s);
+TINYSIP_API tsip_header_Security_Client_t* tsip_header_Security_Client_create_null();
+
+TINYSIP_API tsip_header_Security_Clients_L_t *tsip_header_Security_Client_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Security_Client_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SECURITY_CLIENT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Security_Server.h b/tinySIP/include/tinysip/headers/tsip_header_Security_Server.h
new file mode 100644
index 0000000..eb66c43
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Security_Server.h
@@ -0,0 +1,111 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Security_Server.h
+ * @brief SIP header 'Security-Server' as per RFC 3329.
+ *
+
+ */
+#ifndef _TSIP_HEADER_SECURITY_SERVER_H_
+#define _TSIP_HEADER_SECURITY_SERVER_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tnet_types.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_SECURITY_SERVER_VA_ARGS() tsip_header_Security_Server_def_t
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Security-Server' as per RFC 3329.
+///
+/// @par ABNF : Security-Server = "Security-Server" HCOLON sec-mechanism *(COMMA sec-mechanism)
+/// sec-mechanism = mechanism-name *( SEMI mech-parameters )
+/// mechanism-name = ( "digest" / "tls" / "ipsec-ike" / "ipsec-man" / token )
+/// mech-parameters = ( preference / digest-algorithm / digest-qop / digest-verify / mech-extension )
+/// preference = "q" EQUAL qvalue
+/// digest-algorithm = "d-alg" EQUAL token
+/// digest-qop = "d-qop" EQUAL token
+/// digest-verify = "d-ver" EQUAL LDQUOT 32LHEX RDQUOT
+/// mech-extension = generic-param
+///
+/// mechanism-name = ( "ipsec-3gpp" )
+/// mech-parameters = ( algorithm / protocol /mode /
+/// encrypt-algorithm / spi /
+/// port1 / port2 )
+/// algorithm = "alg" EQUAL ( "hmac-md5-96" /
+/// "hmac-sha-1-96" )
+/// protocol = "prot" EQUAL ( "ah" / "esp" )
+/// mode = "mod" EQUAL ( "trans" / "tun" )
+/// encrypt-algorithm = "ealg" EQUAL ( "des-ede3-cbc" / "null" )
+/// spi = "spi" EQUAL spivalue
+/// spivalue = 10DIGIT; 0 to 4294967295
+/// port1 = "port1" EQUAL port
+/// port2 = "port2" EQUAL port
+/// port = 1*DIGIT
+///
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Security_Server_s
+{
+ TSIP_DECLARE_HEADER;
+
+ //! sec-mechanism (e.g. "digest" / "tls" / "ipsec-3gpp")
+ char* mech;
+ //! algorithm (e.g. "hmac-md5-96" / "hmac-sha-1-96")
+ char* alg;
+ //! protocol (e.g. "ah" / "esp")
+ char* prot;
+ //! mode (e.g. "trans" / "tun")
+ char* mod;
+ //! encrypt-algorithm (e.g. "des-ede3-cbc" / "null")
+ char* ealg;
+ //! client port
+ tnet_port_t port_c;
+ //! server port
+ tnet_port_t port_s;
+ //! client spi
+ uint32_t spi_c;
+ //! server spi
+ uint32_t spi_s;
+ //! preference
+ double q;
+}
+tsip_header_Security_Server_t;
+
+typedef tsk_list_t tsip_header_Security_Servers_L_t;
+
+TINYSIP_API tsip_header_Security_Server_t* tsip_header_Security_Server_create();
+TINYSIP_API tsip_header_Security_Server_t* tsip_header_Security_Server_create_null();
+
+TINYSIP_API tsip_header_Security_Servers_L_t *tsip_header_Security_Server_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Security_Server_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SECURITY_SERVER_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Security_Verify.h b/tinySIP/include/tinysip/headers/tsip_header_Security_Verify.h
new file mode 100644
index 0000000..a9e59aa
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Security_Verify.h
@@ -0,0 +1,110 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Security_Verify.h
+ * @brief SIP header 'Security-Client' as per RFC 3329.
+ *
+
+ */
+#ifndef _TSIP_HEADER_SECURITY_VERIFY_H_
+#define _TSIP_HEADER_SECURITY_VERIFY_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tnet_types.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_SECURITY_VERIFY_VA_ARGS() tsip_header_Security_Verify_def_t
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Security-Client' as per RFC 3329.
+///
+/// @par ABNF : Security-Client = "Security-Client" HCOLON sec-mechanism *(COMMA sec-mechanism)
+/// sec-mechanism = mechanism-name *( SEMI mech-parameters )
+/// mechanism-name = ( "digest" / "tls" / "ipsec-ike" / "ipsec-man" / token )
+/// mech-parameters = ( preference / digest-algorithm / digest-qop / digest-verify / mech-extension )
+/// preference = "q" EQUAL qvalue
+/// digest-algorithm = "d-alg" EQUAL token
+/// digest-qop = "d-qop" EQUAL token
+/// digest-verify = "d-ver" EQUAL LDQUOT 32LHEX RDQUOT
+/// mech-extension = generic-param
+///
+/// mechanism-name = ( "ipsec-3gpp" )
+/// mech-parameters = ( algorithm / protocol /mode /
+/// encrypt-algorithm / spi /
+/// port1 / port2 )
+/// algorithm = "alg" EQUAL ( "hmac-md5-96" /
+/// "hmac-sha-1-96" )
+/// protocol = "prot" EQUAL ( "ah" / "esp" )
+/// mode = "mod" EQUAL ( "trans" / "tun" )
+/// encrypt-algorithm = "ealg" EQUAL ( "des-ede3-cbc" / "null" )
+/// spi = "spi" EQUAL spivalue
+/// spivalue = 10DIGIT; 0 to 4294967295
+/// port1 = "port1" EQUAL port
+/// port2 = "port2" EQUAL port
+/// port = 1*DIGIT
+///
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Security_Verify_s
+{
+ TSIP_DECLARE_HEADER;
+
+ //! sec-mechanism (e.g. "digest" / "tls" / "ipsec-3gpp")
+ char* mech;
+ //! algorithm (e.g. "hmac-md5-96" / "hmac-sha-1-96")
+ char* alg;
+ //! protocol (e.g. "ah" / "esp")
+ char* prot;
+ //! mode (e.g. "trans" / "tun")
+ char* mod;
+ //! encrypt-algorithm (e.g. "des-ede3-cbc" / "null")
+ char* ealg;
+ //! client port
+ tnet_port_t port_c;
+ //! server port
+ tnet_port_t port_s;
+ //! client spi
+ uint32_t spi_c;
+ //! server spi
+ uint32_t spi_s;
+ //! preference
+ double q;
+}
+tsip_header_Security_Verify_t;
+
+typedef tsk_list_t tsip_header_Security_Verifies_L_t;
+
+TINYSIP_API tsip_header_Security_Verify_t* tsip_header_Security_Verify_create();
+TINYSIP_API tsip_header_Security_Verify_t* tsip_header_Security_Verify_create_null();
+
+TINYSIP_API tsip_header_Security_Verifies_L_t *tsip_header_Security_Verify_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Security_Verify_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SECURITY_VERIFY_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Server.h b/tinySIP/include/tinysip/headers/tsip_header_Server.h
new file mode 100644
index 0000000..1bdb3e5
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Server.h
@@ -0,0 +1,69 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Server.h
+ * @brief SIP header 'Server'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SERVER_H_
+#define _TSIP_HEADER_SERVER_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_SERVER_VA_ARGS(server) tsip_header_Server_def_t, (const char*)server
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Server'.
+///
+/// @par ABNF: Server = "Server" HCOLON server-val *(LWS server-val)
+/// server-val = product / comment
+/// product = token [SLASH product-version]
+/// product-version = token
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Server_s
+{
+ TSIP_DECLARE_HEADER;
+ char* value;
+}
+tsip_header_Server_t;
+
+TINYSIP_API tsip_header_Server_t* tsip_header_server_create(const char* server);
+TINYSIP_API tsip_header_Server_t* tsip_header_server_create_null();
+
+TINYSIP_API tsip_header_Server_t *tsip_header_Server_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Server_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SERVER_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Service_Route.h b/tinySIP/include/tinysip/headers/tsip_header_Service_Route.h
new file mode 100644
index 0000000..307d644
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Service_Route.h
@@ -0,0 +1,71 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Service_Route.h
+ * @brief SIP header 'Service-Route'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SERVICE_ROUTE_H_
+#define _TSIP_HEADER_SERVICE_ROUTE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tinysip/tsip_uri.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_SERVICE_ROUTE_VA_ARGS(uri) tsip_header_Service_Route_def_t, (const tsip_uri_t*)uri
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Service-Route' as per RFC 3608.
+///
+/// @par ABNF: Service-Route = "Service-Route" HCOLON sr-value *(COMMA sr-value)
+/// sr-value = name-addr *( SEMI rr-param )
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Service_Route_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+}
+tsip_header_Service_Route_t;
+
+typedef tsk_list_t tsip_header_Service_Routes_L_t;
+
+TINYSIP_API tsip_header_Service_Route_t* tsip_header_Service_Route_create(const tsip_uri_t* uri);
+TINYSIP_API tsip_header_Service_Route_t* tsip_header_Service_Route_create_null();
+
+TINYSIP_API tsip_header_Service_Routes_L_t *tsip_header_Service_Route_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Service_Route_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SERVICE_ROUTE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Session_Expires.h b/tinySIP/include/tinysip/headers/tsip_header_Session_Expires.h
new file mode 100644
index 0000000..386d652
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Session_Expires.h
@@ -0,0 +1,69 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Session_Expires.h
+ * @brief SIP header 'Session-Expires'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SESSION_EXPIRES_H_
+#define _TSIP_HEADER_SESSION_EXPIRES_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_SESSION_EXPIRES_VA_ARGS(delta_seconds, refresher_uas) tsip_header_Session_Expires_def_t, (int64_t)delta_seconds, (tsk_bool_t)refresher_uas
+
+#define TSIP_SESSION_EXPIRES_DEFAULT_VALUE 1800
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Session-Expires'.
+///
+/// @par ABNF: Session-Expires = ( "Session-Expires" / "x" ) HCOLON delta-seconds *( SEMI (se-params )
+/// se-params = refresher-param / generic-param
+/// refresher-param = "refresher" EQUAL ("uas" / "uac")
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Session_Expires_s
+{
+ TSIP_DECLARE_HEADER;
+
+ int64_t delta_seconds;
+ tsk_bool_t refresher_uas;
+}
+tsip_header_Session_Expires_t;
+
+TINYSIP_API tsip_header_Session_Expires_t* tsip_header_Session_Expires_create(int64_t delta_seconds, tsk_bool_t refresher_uas);
+
+TINYSIP_API tsip_header_Session_Expires_t *tsip_header_Session_Expires_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Session_Expires_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SESSION_EXPIRES_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Subject.h b/tinySIP/include/tinysip/headers/tsip_header_Subject.h
new file mode 100644
index 0000000..69cbfec
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Subject.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Subject.h
+ * @brief SIP header 'Subject'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SUBJECT_H_
+#define _TSIP_HEADER_SUBJECT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Subject'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Subject_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Subject_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SUBJECT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Subscription_State.h b/tinySIP/include/tinysip/headers/tsip_header_Subscription_State.h
new file mode 100644
index 0000000..5e4f90c
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Subscription_State.h
@@ -0,0 +1,71 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Subscription_State.h
+ * @brief SIP header 'Subscription-State'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SUBSCRIPTION_STATE_H_
+#define _TSIP_HEADER_SUBSCRIPTION_STATE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Subscription-State'.
+///
+/// @par ABNF: Subscription-State = ( "Subscription-State" / "o" ) HCOLON substate-value *( SEMI subexp-params )
+/// substate-value = "active" / "pending" / "terminated" / extension-substate
+/// extension-substate = token
+/// subexp-params = ("reason" EQUAL event-reason-value) / ("expires" EQUAL delta-seconds) / ("retry-after" EQUAL delta-seconds) / generic-param
+/// event-reason-value = "deactivated" / "probation" / "rejected" / "timeout" / "giveup" / "noresource" / event-reason-extension
+/// event-reason-extension = token
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Subscription_State_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char* state;
+ char* reason;
+ int32_t expires;
+ int32_t retry_after;
+}
+tsip_header_Subscription_State_t;
+
+tsip_header_Subscription_State_t* tsip_header_Subscription_State_create();
+
+tsip_header_Subscription_State_t *tsip_header_Subscription_State_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Subscription_State_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SUBSCRIPTION_STATE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Supported.h b/tinySIP/include/tinysip/headers/tsip_header_Supported.h
new file mode 100644
index 0000000..6b0ecd4
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Supported.h
@@ -0,0 +1,67 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Supported.h
+ * @brief SIP header 'Supported'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_SUPPORTED_H_
+#define _TSIP_HEADER_SUPPORTED_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_SUPPORTED_VA_ARGS(option) tsip_header_Supported_def_t, (const char*)option
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Supported'.
+///
+/// @par ABNF: Supported / k
+/// Supported = ( "Supported" / "k" ) HCOLON [option-tag *(COMMA option-tag)]
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Supported_s
+{
+ TSIP_DECLARE_HEADER;
+
+ tsk_strings_L_t *options;
+}
+tsip_header_Supported_t;
+
+TINYSIP_API tsip_header_Supported_t* tsip_header_Supported_create(const char* option);
+TINYSIP_API tsip_header_Supported_t* tsip_header_Supported_create_null();
+
+TINYSIP_API tsip_header_Supported_t *tsip_header_Supported_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Supported_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_SUPPORTED_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Target_Dialog.h b/tinySIP/include/tinysip/headers/tsip_header_Target_Dialog.h
new file mode 100644
index 0000000..185fdf9
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Target_Dialog.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Target_Dialog.h
+ * @brief SIP header 'Target-Dialog'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_TARGET_DIALOG_H_
+#define _TSIP_HEADER_TARGET_DIALOG_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Target-Dialog'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Target_Dialog_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Target_Dialog_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_TARGET_DIALOG_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Timestamp.h b/tinySIP/include/tinysip/headers/tsip_header_Timestamp.h
new file mode 100644
index 0000000..6492824
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Timestamp.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Timestamp.h
+ * @brief SIP header 'Timestamp'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_TIMESTAMP_H_
+#define _TSIP_HEADER_TIMESTAMP_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Timestamp'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Timestamp_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Timestamp_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_TIMESTAMP_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_To.h b/tinySIP/include/tinysip/headers/tsip_header_To.h
new file mode 100644
index 0000000..92970f1
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_To.h
@@ -0,0 +1,70 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_To.h
+ * @brief SIP header 'To'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_TO_H_
+#define _TSIP_HEADER_TO_H_
+
+#include "tinysip_config.h"
+#include "tinysip/tsip_uri.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_TO_VA_ARGS(display_name, uri, tag) tsip_header_To_def_t, (const char*)display_name, (const tsip_uri_t*)uri, (const char*)tag
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'To' .
+///
+/// @par ABNF: To = To = ( "To" / "t" ) HCOLON ( name-addr / addr-spec ) *( SEMI to-param )
+/// to-param = tag-param / generic-param
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_To_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *display_name;
+ tsip_uri_t *uri;
+ char *tag;
+}
+tsip_header_To_t;
+
+TINYSIP_API tsip_header_To_t* tsip_header_To_create(const char* display_name, const tsip_uri_t* uri, const char* tag);
+TINYSIP_API tsip_header_To_t* tsip_header_To_create_null();
+
+TINYSIP_API tsip_header_To_t *tsip_header_To_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_To_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_TO_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Unsupported.h b/tinySIP/include/tinysip/headers/tsip_header_Unsupported.h
new file mode 100644
index 0000000..d58f8d4
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Unsupported.h
@@ -0,0 +1,54 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Unsupported.h
+ * @brief SIP header 'Unsupported'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_UNSUPPORTED_H_
+#define _TSIP_HEADER_UNSUPPORTED_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Unsupported'.
+///
+/// @par ABNF
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Unsupported_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Unsupported_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_UNSUPPORTED_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_User_Agent.h b/tinySIP/include/tinysip/headers/tsip_header_User_Agent.h
new file mode 100644
index 0000000..a69c454
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_User_Agent.h
@@ -0,0 +1,65 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_User_Agent.h
+ * @brief SIP header 'User-Agent'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_USER_AGENT_H_
+#define _TSIP_HEADER_USER_AGENT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_HEADER_USER_AGENT_VA_ARGS(ua) tsip_header_User_Agent_def_t, (const char*)ua
+
+#define TSIP_HEADER_USER_AGENT_DEFAULT "IM-client/OMA1.0 doubango/v1.0.0"
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'User-Agent'.
+///
+/// @par ABNF : User-Agent = "User-Agent" HCOLON server-val *(LWS server-val)
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_User_Agent_s
+{
+ TSIP_DECLARE_HEADER;
+ char *value;
+}
+tsip_header_User_Agent_t;
+
+TINYSIP_API tsip_header_User_Agent_t* tsip_header_User_Agent_create(const char* ua);
+TINYSIP_API tsip_header_User_Agent_t* tsip_header_User_Agent_create_null();
+
+TINYSIP_API tsip_header_User_Agent_t *tsip_header_User_Agent_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_User_Agent_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_USER_AGENT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Via.h b/tinySIP/include/tinysip/headers/tsip_header_Via.h
new file mode 100644
index 0000000..dca22a7
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Via.h
@@ -0,0 +1,107 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Via.h
+ * @brief SIP Via/v header as per RFC 3261 subclause 20.42.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_HEADER_VIA_H
+#define TINYSIP_HEADER_VIA_H
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+#include "tsk_object.h"
+
+TSIP_BEGIN_DECLS
+
+
+#define TSIP_HEADER_VIA_VA_ARGS(proto_name, proto_version, transport, host, port) tsip_header_Via_def_t, (const char*)proto_name, (const char*)proto_version, (const char*)transport, (const char*)host, (uint16_t)port
+
+
+#define TSIP_HEADER_VIA_HAS_RPORT(self) ((self)->rport!=0)
+#define TSIP_HEADER_VIA_HAS_TTL(self) ((self)->ttl!=0)
+#define TSIP_HEADER_VIA_UNRELIABLE_TRANS(self) (tsk_striequals("UDP", (self)->transport))
+#define TSIP_HEADER_VIA_RELIABLE_TRANS(self) !(TSIP_HEADER_VIA_UNRELIABLE_TRANS(self))
+#define TSIP_HEADER_VIA_PROTO_NAME_DEFAULT "SIP"
+#define TSIP_HEADER_VIA_PROTO_VERSION_DEFAULT "2.0"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP Via/v header as per RFC 3261 subclause 20.42.
+/// ABNF: Via = ( "Via" / "v" ) HCOLON via-parm *(COMMA via-parm)
+/// via-parm = sent-protocol LWS sent-by *( SEMI via-params )
+/// via-params = via-ttl / via-maddr / via-received / via-branch / via-compression / response-port / via-extension
+/// via-ttl = "ttl" EQUAL ttl
+/// via-maddr = "maddr" EQUAL host
+/// via-received = "received" EQUAL (IPv4address / IPv6address)
+/// via-branch = "branch" EQUAL token
+/// via-compression = "comp" EQUAL ("sigcomp" / other-compression)
+/// other-compression = token
+/// response-port = "rport" [EQUAL 1*DIGIT]
+/// via-extension = generic-param
+/// sent-protocol = protocol-name SLASH protocol-version SLASH transport
+/// protocol-name = "SIP" / token
+/// protocol-version = token
+/// transport = "UDP" / "TCP" / "TLS" / "SCTP" / "TLS-SCTP" / other-transport
+/// sent-by = host [ COLON port ]
+/// ttl = 1*3DIGIT
+///
+/// @author Mamadou
+/// @date 12/5/2009
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Via_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char *branch;
+ char *host;
+ uint16_t port;
+ char *comp;
+ char *sigcomp_id;
+ char *received;
+ char *maddr;
+ char *proto_name;
+ char *proto_version;
+ char *transport;
+
+ int32_t rport;
+ int32_t ttl;
+}
+tsip_header_Via_t;
+
+typedef tsk_list_t tsip_header_Vias_L_t;
+
+TINYSIP_API tsip_header_Via_t* tsip_header_Via_create(const char* proto_name, const char* proto_version, const char* transport, const char* host, uint16_t port);
+TINYSIP_API tsip_header_Via_t* tsip_header_Via_create_null();
+
+TINYSIP_API tsip_header_Vias_L_t *tsip_header_Via_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Via_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_HEADER_VIA_H */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_WWW_Authenticate.h b/tinySIP/include/tinysip/headers/tsip_header_WWW_Authenticate.h
new file mode 100644
index 0000000..5de99d9
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_WWW_Authenticate.h
@@ -0,0 +1,79 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_WWW_Authenticate.h
+ * @brief SIP header 'WWW-Authenticate'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_WWW_AUTHENTICATE_H_
+#define _TSIP_HEADER_WWW_AUTHENTICATE_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'WWW-Authenticate'.
+///
+/// @par ABNF = WWW-Authenticate = "WWW-Authenticate" HCOLON challenge
+/// challenge = ("Digest" LWS digest-cln *(COMMA digest-cln)) / other-challenge
+/// other-challenge = auth-scheme / auth-param *(COMMA auth-param)
+/// digest-cln = realm / domain / nonce / opaque / stale / algorithm / qop-options / auth-param
+/// realm = "realm" EQUAL realm-value
+/// realm-value = quoted-string
+/// domain = "domain" EQUAL LDQUOT URI *( 1*SP URI ) RDQUOT
+/// URI = absoluteURI / abs-path
+/// opaque = "opaque" EQUAL quoted-string
+/// stale = "stale" EQUAL ( "true" / "false" )
+/// qop-options = "qop" EQUAL LDQUOT qop-value *("," qop-value) RDQUOT
+/// qop-value = "auth" / "auth-int" / token
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_WWW_Authenticate_s
+{
+ TSIP_DECLARE_HEADER;
+
+ char* scheme;
+ char* realm;
+ char* domain;
+ char* nonce;
+ char* opaque;
+ tsk_bool_t stale;
+ char* algorithm;
+ char* qop;
+}
+tsip_header_WWW_Authenticate_t;
+
+tsip_header_WWW_Authenticate_t *tsip_header_WWW_Authenticate_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_WWW_Authenticate_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_WWW_AUTHENTICATE_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_Warning.h b/tinySIP/include/tinysip/headers/tsip_header_Warning.h
new file mode 100644
index 0000000..6c16112
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_Warning.h
@@ -0,0 +1,72 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_Warning.h
+ * @brief SIP header 'Warning.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_WARNING_H_
+#define _TSIP_HEADER_WARNING_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Warning'.
+///
+/// @par ABNF: Warning = "Warning" HCOLON warning-value *(COMMA warning-value)
+/// warning-value = warn-code SP warn-agent SP warn-text
+/// warn-code = 3DIGIT
+/// warn-agent = hostport / pseudonym
+/// warn-text = quoted-string
+/// pseudonym = token
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Warning_s
+{
+ TSIP_DECLARE_HEADER;
+
+ int32_t code;
+ char* agent;
+ char* text;
+}
+tsip_header_Warning_t;
+
+typedef tsk_list_t tsip_header_Warnings_L_t;
+
+tsip_header_Warning_t* tsip_header_Warning_create();
+
+tsip_header_Warnings_L_t *tsip_header_Warning_parse(const char *data, tsk_size_t size);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_header_Warning_def_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_WARNING_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_header_accept.h b/tinySIP/include/tinysip/headers/tsip_header_accept.h
new file mode 100644
index 0000000..1742051
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_header_accept.h
@@ -0,0 +1,57 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header_accept.h
+ * @brief SIP header 'Accept-Contact'.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef _TSIP_HEADER_ACCEPT_H_
+#define _TSIP_HEADER_ACCEPT_H_
+
+#include "tinysip_config.h"
+#include "tinysip/headers/tsip_header.h"
+
+TSIP_BEGIN_DECLS
+
+// The ' in the media-range field is used for doxygen (escape) and is not part of the abnf.
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP header 'Accept' as per RFC 3261 subclause 20.1.
+///
+/// @par ABNF = Accept = "Accept" HCOLON [ accept-range *(COMMA accept-range) ] ; example: ;
+/// Accept: application/dialog-info+xml
+/// accept-range = media-range *(SEMI accept-param)
+/// media-range = ( "*'/*" / ( m-type SLASH "*" ) / ( m-type SLASH m-subtype ) ) *( SEMI m-parameter )
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_header_Accept_s
+{
+ TSIP_DECLARE_HEADER;
+}
+tsip_header_Accept_t;
+
+TSIP_END_DECLS
+
+#endif /* _TSIP_HEADER_ACCEPT_H_ */
+
diff --git a/tinySIP/include/tinysip/headers/tsip_headers.h b/tinySIP/include/tinysip/headers/tsip_headers.h
new file mode 100644
index 0000000..b520cc4
--- /dev/null
+++ b/tinySIP/include/tinysip/headers/tsip_headers.h
@@ -0,0 +1,89 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_header.h
+ * @brief List of all supported 3GPP/SIP headers.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_HEADERS_H
+#define TINYSIP_HEADERS_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/headers/tsip_header_Allow.h"
+#include "tinysip/headers/tsip_header_Allow_Events.h"
+#include "tinysip/headers/tsip_header_Authorization.h"
+#include "tinysip/headers/tsip_header_Call_ID.h"
+#include "tinysip/headers/tsip_header_Contact.h"
+#include "tinysip/headers/tsip_header_CSeq.h"
+#include "tinysip/headers/tsip_header_Date.h"
+#include "tinysip/headers/tsip_header_Dummy.h"
+#include "tinysip/headers/tsip_header_Event.h"
+#include "tinysip/headers/tsip_header_Expires.h"
+#include "tinysip/headers/tsip_header_From.h"
+#include "tinysip/headers/tsip_header_Max_Forwards.h"
+#include "tinysip/headers/tsip_header_Min_Expires.h"
+#include "tinysip/headers/tsip_header_Min_SE.h"
+#include "tinysip/headers/tsip_header_Path.h"
+#include "tinysip/headers/tsip_header_P_Access_Network_Info.h"
+#include "tinysip/headers/tsip_header_P_Asserted_Identity.h"
+#include "tinysip/headers/tsip_header_P_Associated_URI.h"
+#include "tinysip/headers/tsip_header_P_Charging_Function_Addresses.h"
+#include "tinysip/headers/tsip_header_P_Preferred_Identity.h"
+#include "tinysip/headers/tsip_header_Privacy.h"
+#include "tinysip/headers/tsip_header_Proxy_Authenticate.h"
+#include "tinysip/headers/tsip_header_Proxy_Authorization.h"
+#include "tinysip/headers/tsip_header_Proxy_Require.h"
+#include "tinysip/headers/tsip_header_RAck.h"
+#include "tinysip/headers/tsip_header_Record_Route.h"
+#include "tinysip/headers/tsip_header_Refer_Sub.h"
+#include "tinysip/headers/tsip_header_Refer_To.h"
+#include "tinysip/headers/tsip_header_Referred_By.h"
+#include "tinysip/headers/tsip_header_Require.h"
+#include "tinysip/headers/tsip_header_Route.h"
+#include "tinysip/headers/tsip_header_RSeq.h"
+#include "tinysip/headers/tsip_header_Security_Client.h"
+#include "tinysip/headers/tsip_header_Security_Server.h"
+#include "tinysip/headers/tsip_header_Security_Verify.h"
+#include "tinysip/headers/tsip_header_Server.h"
+#include "tinysip/headers/tsip_header_Session_Expires.h"
+#include "tinysip/headers/tsip_header_Service_Route.h"
+#include "tinysip/headers/tsip_header_SIP_ETag.h"
+#include "tinysip/headers/tsip_header_SIP_If_Match.h"
+#include "tinysip/headers/tsip_header_Subscription_State.h"
+#include "tinysip/headers/tsip_header_Supported.h"
+#include "tinysip/headers/tsip_header_To.h"
+#include "tinysip/headers/tsip_header_User_Agent.h"
+#include "tinysip/headers/tsip_header_Via.h"
+#include "tinysip/headers/tsip_header_Warning.h"
+#include "tinysip/headers/tsip_header_WWW_Authenticate.h"
+
+TSIP_BEGIN_DECLS
+
+TSIP_END_DECLS
+
+
+#endif /* TINYSIP_HEADERS_H */
+
diff --git a/tinySIP/include/tinysip/parsers/tsip_parser_header.h b/tinySIP/include/tinysip/parsers/tsip_parser_header.h
new file mode 100644
index 0000000..da673a4
--- /dev/null
+++ b/tinySIP/include/tinysip/parsers/tsip_parser_header.h
@@ -0,0 +1,44 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_parser_header.h
+ * @brief SIP headers parser.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_PARSER_HEADERS_H
+#define TINYSIP_PARSER_HEADERS_H
+
+#include "tinysip_config.h"
+#include "tinysip/tsip_message.h"
+#include "tsk_ragel_state.h"
+
+TSIP_BEGIN_DECLS
+
+tsk_bool_t tsip_header_parse(tsk_ragel_state_t *state, tsip_message_t *message);
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_PARSER_HEADERS_H */
+
diff --git a/tinySIP/include/tinysip/parsers/tsip_parser_message.h b/tinySIP/include/tinysip/parsers/tsip_parser_message.h
new file mode 100644
index 0000000..bf1091d
--- /dev/null
+++ b/tinySIP/include/tinysip/parsers/tsip_parser_message.h
@@ -0,0 +1,44 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_parser_message.h
+ * @brief SIP message parser.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_PARSER_MESSAGE_H
+#define TINYSIP_PARSER_MESSAGE_H
+
+#include "tinysip_config.h"
+#include "tinysip/tsip_message.h"
+#include "tsk_ragel_state.h"
+
+TSIP_BEGIN_DECLS
+
+TINYSIP_API tsk_bool_t tsip_message_parse(tsk_ragel_state_t *state, tsip_message_t **result, tsk_bool_t extract_content);
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_PARSER_MESSAGE_H */
+
diff --git a/tinySIP/include/tinysip/parsers/tsip_parser_uri.h b/tinySIP/include/tinysip/parsers/tsip_parser_uri.h
new file mode 100644
index 0000000..84537f5
--- /dev/null
+++ b/tinySIP/include/tinysip/parsers/tsip_parser_uri.h
@@ -0,0 +1,45 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_parser_uri.h
+ * @brief SIP/SIPS/TEL URI parser.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_PARSER_URI_H
+#define TINYSIP_PARSER_URI_H
+
+#include "tinysip_config.h"
+#include "tinysip/tsip_uri.h"
+
+#include "tsk_ragel_state.h"
+
+TSIP_BEGIN_DECLS
+
+TINYSIP_API tsip_uri_t *tsip_uri_parse(const char *data, tsk_size_t size);
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_PARSER_URI_H */
+
diff --git a/tinySIP/include/tinysip/sigcomp/tsip_sigcomp.h b/tinySIP/include/tinysip/sigcomp/tsip_sigcomp.h
new file mode 100644
index 0000000..6ccb461
--- /dev/null
+++ b/tinySIP/include/tinysip/sigcomp/tsip_sigcomp.h
@@ -0,0 +1,69 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_sigcomp.h
+ * @brief SigComp helper API.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TSIP_SIGCOMP_H
+#define TSIP_SIGCOMP_H
+
+#include "tinysip_config.h"
+
+#include "tsk_object.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_IS_SIGCOMP_DATA(data) ((data) && (*((uint8_t*)data) & 0xF8) == 0xF8)
+
+#define TSIP_SIGCOMP_DMS 8192
+#define TSIP_SIGCOMP_SMS 8192
+#define TSIP_SIGCOMP_CPB 64
+#define TSIP_SIGCOMP_PRES_DICT tsk_false
+#define TSIP_SIGCOMP_SIP_DICT tsk_true
+#define TSIP_SIGCOMP_MAX_BUFF_SIZE 0x2710
+
+typedef void tsip_sigcomp_handle_t;
+
+tsip_sigcomp_handle_t* tsip_sigcomp_handler_create(uint8_t cpb, uint32_t dms, uint32_t sms);
+int tsip_sigcomp_handler_set_dicts(tsip_sigcomp_handle_t* self, tsk_bool_t sip_n_sdp, tsk_bool_t pres);
+int tsip_sigcomp_handler_add_compartment(tsip_sigcomp_handle_t* self, const char* comp_id);
+int tsip_sigcomp_handler_remove_compartment(tsip_sigcomp_handle_t* self, const char* comp_id);
+const char* tsip_sigcomp_handler_fixme_getcompid(const tsip_sigcomp_handle_t* self);
+int tsip_sigcomp_close_all(tsip_sigcomp_handle_t* self);
+tsk_size_t tsip_sigcomp_handler_compress(tsip_sigcomp_handle_t* self, const char* comp_id, tsk_bool_t is_stream, const void* in_data, tsk_size_t in_size, void* out_data, tsk_size_t out_maxsize);
+tsk_size_t tsip_sigcomp_handler_uncompress(tsip_sigcomp_handle_t* self, const char* comp_id, tsk_bool_t is_stream, const void* in_data, tsk_size_t in_size, void* out_data, tsk_size_t out_maxsize, tsk_bool_t* is_nack);
+tsk_size_t tsip_sigcomp_handler_uncompress_next(tsip_sigcomp_handle_t* self, const char* comp_id, void** nack_data, tsk_bool_t* is_nack);
+
+
+#define tsip_sigcomp_handler_compressUDP(self, comp_id, in_data, in_size, out_data, out_maxsize) tsip_sigcomp_handler_compress(self, comp_id, tsk_false, in_data, in_size, out_data, out_maxsize)
+#define tsip_sigcomp_handler_compressTCP(self, comp_id, in_data, in_size, out_data, out_maxsize) tsip_sigcomp_handler_compress(self, comp_id, tsk_true, in_data, in_size, out_data, out_maxsize)
+#define tsip_sigcomp_handler_uncompressUDP(self, comp_id, in_data, in_size, out_data, out_maxsize, is_nack) tsip_sigcomp_handler_uncompress(self, comp_id, tsk_false, in_data, in_size, out_data, out_maxsize, is_nack)
+#define tsip_sigcomp_handler_uncompressTCP(self, comp_id, in_data, in_size, out_data, out_maxsize, is_nack) tsip_sigcomp_handler_uncompress(self, comp_id, tsk_true, in_data, in_size, out_data, out_maxsize, is_nack)
+
+TSIP_END_DECLS
+
+#endif /* TSIP_SIGCOMP_H */
+
diff --git a/tinySIP/include/tinysip/transactions/tsip_transac.h b/tinySIP/include/tinysip/transactions/tsip_transac.h
new file mode 100644
index 0000000..3a896a0
--- /dev/null
+++ b/tinySIP/include/tinysip/transactions/tsip_transac.h
@@ -0,0 +1,181 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transac.h
+ * @brief SIP transaction base class as per RFC 3261 subclause 17.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSAC_H
+#define TINYSIP_TRANSAC_H
+
+#include "tinysip_config.h"
+
+#include "tsip.h"
+#include "tinysip/tsip_timers.h"
+#include "tinysip/tsip_message.h"
+
+#include "tinysip/dialogs/tsip_dialog.h"
+
+#include "tsk_safeobj.h"
+#include "tsk_list.h"
+#include "tsk_fsm.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TRANSAC(self) ((tsip_transac_t*)(self))
+#define TSIP_TRANSAC_GET_TYPE(self) TSIP_TRANSAC((self))->type
+#define TSIP_TRANSAC_GET_FSM(self) TSIP_TRANSAC((self))->fsm
+#define TSIP_TRANSAC_GET_SESSION(self) ((struct tsip_ssession_s*)(TSIP_TRANSAC_GET_DIALOG((self)) ? TSIP_TRANSAC_GET_DIALOG((self))->ss : tsk_null))
+#define TSIP_TRANSAC_GET_DIALOG(self) ((struct tsip_dialog_s*)(TSIP_TRANSAC_GET_DST((self))->type == tsip_transac_dst_type_dialog ? TSIP_TRANSAC_GET_DST((self))->dialog.dlg : tsk_null))
+#define TSIP_TRANSAC_GET_DST(self) TSIP_TRANSAC((self))->dst
+#define TSIP_TRANSAC_GET_STACK(self) TSIP_TRANSAC_GET_DST((self))->stack
+#define TSIP_TRANSAC_GET_TIMER_MGR(self) TSIP_TRANSAC_GET_STACK((self))->timer_mgr
+
+#define TSIP_TRANSAC_IS_CLIENT(self) ((self) && ((self)->type == tsip_transac_type_ict || (self)->type == tsip_transac_type_nict))
+#define TSIP_TRANSAC_IS_SERVER(self) !TSIP_TRANSAC_IS_CLIENT((self))
+
+#define TSIP_TRANSAC_MAGIC_COOKIE "z9hG4bK"
+
+#define TSIP_TRANSAC_SYNC_BEGIN(self) tsk_safeobj_lock(TSIP_TRANSAC(self))
+#define TSIP_TRANSAC_SYNC_END(self) tsk_safeobj_unlock(TSIP_TRANSAC(self))
+
+#define TRANSAC_TIMER_SCHEDULE(name, TX) \
+ self->timer##TX.id = tsk_timer_mgr_global_schedule(self->timer##TX.timeout, TSK_TIMER_CALLBACK_F(tsip_transac_##name##_timer_callback), self)
+
+#define TRANSAC_TIMER_CANCEL(TX) \
+ tsk_timer_mgr_global_cancel(self->timer##TX.id)
+
+typedef enum tsip_transac_event_type_e
+{
+ tsip_transac_incoming_msg,
+ tsip_transac_outgoing_msg,
+ tsip_transac_canceled,
+ tsip_transac_terminated,
+ tsip_transac_timedout,
+ tsip_transac_error,
+ tsip_transac_transport_error
+}
+tsip_transac_event_type_t;
+
+/*typedef struct tsip_transac_event_s
+{
+ tsip_transac_event_type_t type;
+ const tsip_message_t *msg;
+}
+tsip_transac_event_t;
+
+#define TSIP_TRANSAC_EVENT_INIT(transac_event, type, msg) \
+ transac_event.type = type; \
+ transac_event.msg = msg;*/
+
+typedef int (*tsip_transac_event_callback_f)(const void *arg, tsip_transac_event_type_t type, const tsip_message_t *msg);
+#define TSIP_TRANSAC_EVENT_CALLBACK_F(callback) ((tsip_transac_event_callback_f)(callback))
+
+typedef enum tsip_transac_type_e
+{
+ tsip_transac_type_ict, /**< Invite Client Transaction. */
+ tsip_transac_type_ist, /**< Invite Server Transaction. */
+ tsip_transac_type_nict, /**< Non-Invite Client Transaction. */
+ tsip_transac_type_nist, /**< Non-Invite Server Transaction. */
+}
+tsip_transac_type_t;
+
+
+
+typedef enum tsip_transac_dst_type_e
+{
+ tsip_transac_dst_type_dialog,
+ tsip_transac_dst_type_net
+}
+tsip_transac_dst_type_t;
+
+typedef struct tsip_transac_dst_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsip_transac_dst_type_t type;
+ struct tsip_stack_s* stack;
+
+ union{
+ struct{
+ tsip_dialog_t *dlg;
+ }dialog;
+
+ //struct{
+ //}net;
+ };
+}
+tsip_transac_dst_t;
+#define TSIP_TRANSAC_DST(self) ((tsip_transac_dst_t*)(self))
+#define TSIP_DECLARE_TRANSAC_DST tsip_transac_dst_t __transac__
+
+
+typedef struct tsip_transac_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsip_transac_type_t type;
+
+ struct tsip_transac_dst_s* dst;
+ tsk_fsm_t *fsm;
+
+ tsk_bool_t reliable;
+ tsk_bool_t running;
+ tsk_bool_t initialized;
+
+ char *branch;
+
+ int32_t cseq_value;
+ char* cseq_method;
+
+ char* callid;
+
+ tsip_transac_event_callback_f callback;
+}
+tsip_transac_t;
+
+#define TSIP_DECLARE_TRANSAC tsip_transac_t __transac__
+
+typedef tsk_list_t tsip_transacs_L_t; /**< List of @ref tsip_transac_t elements. */
+/*
+================================*/
+
+int tsip_transac_init(tsip_transac_t *self, tsip_transac_type_t type, int32_t cseq_value, const char* cseq_method, const char* callid, struct tsip_transac_dst_s* dst, tsk_fsm_state_id curr, tsk_fsm_state_id term);
+int tsip_transac_deinit(tsip_transac_t *self);
+int tsip_transac_start(tsip_transac_t *self, const tsip_request_t* request);
+int tsip_transac_deliver(tsip_transac_t* self, tsip_dialog_event_type_t event_type, const tsip_message_t *msg);
+int tsip_transac_send(tsip_transac_t *self, const char *branch, tsip_message_t *msg);
+int tsip_transac_cmp(const tsip_transac_t *t1, const tsip_transac_t *t2);
+int tsip_transac_remove(const tsip_transac_t* self);
+int tsip_transac_fsm_act(tsip_transac_t* self, tsk_fsm_action_id , const tsip_message_t*);
+
+
+struct tsip_transac_dst_s* tsip_transac_dst_dialog_create(tsip_dialog_t *dlg);
+struct tsip_transac_dst_s* tsip_transac_dst_net_create(struct tsip_stack_s* stack);
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSAC_H */
+
diff --git a/tinySIP/include/tinysip/transactions/tsip_transac_ict.h b/tinySIP/include/tinysip/transactions/tsip_transac_ict.h
new file mode 100644
index 0000000..a34a413
--- /dev/null
+++ b/tinySIP/include/tinysip/transactions/tsip_transac_ict.h
@@ -0,0 +1,63 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transac_ict.h
+ * @brief SIP INVITE Client Transaction as per RFC 3261 subclause 17.1.1.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSAC_ICT_H
+#define TINYSIP_TRANSAC_ICT_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/transactions/tsip_transac.h"
+#include "tinysip/tsip_message.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TRANSAC_ICT(self) ((tsip_transac_ict_t*)(self))
+
+typedef struct tsip_transac_ict
+{
+ TSIP_DECLARE_TRANSAC;
+
+ tsip_request_t* request;
+
+ tsip_timer_t timerA;
+ tsip_timer_t timerB;
+ tsip_timer_t timerD;
+ tsip_timer_t timerM;
+}
+tsip_transac_ict_t;
+
+tsip_transac_ict_t* tsip_transac_ict_create(int32_t cseq_value, const char* callid, tsip_transac_dst_t* dst);
+int tsip_transac_ict_start(tsip_transac_ict_t *self, const tsip_request_t* request);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transac_ict_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSAC_ICT_H */
+
diff --git a/tinySIP/include/tinysip/transactions/tsip_transac_ist.h b/tinySIP/include/tinysip/transactions/tsip_transac_ist.h
new file mode 100644
index 0000000..82abdbe
--- /dev/null
+++ b/tinySIP/include/tinysip/transactions/tsip_transac_ist.h
@@ -0,0 +1,64 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transac_ist.h
+ * @brief SIP INVITE Server Transaction as per RFC 3261 subclause 17.2.1.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSAC_IST_H
+#define TINYSIP_TRANSAC_IST_H
+
+#include "tinysip_config.h"
+#include "tinysip/transactions/tsip_transac.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TRANSAC_IST(self) ((tsip_transac_ist_t*)(self))
+
+
+typedef struct tsip_transac_ist
+{
+ TSIP_DECLARE_TRANSAC;
+
+ tsip_response_t* lastResponse;
+ tsk_bool_t acked;
+
+ tsip_timer_t timerH;
+ tsip_timer_t timerI;
+ tsip_timer_t timerG;
+ tsip_timer_t timerL;
+ tsip_timer_t timerX;
+}
+tsip_transac_ist_t;
+
+tsip_transac_ist_t* tsip_transac_ist_create(int32_t cseq_value, const char* callid, tsip_transac_dst_t* dst);
+int tsip_transac_ist_start(tsip_transac_ist_t *self, const tsip_request_t* request);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transac_ist_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSAC_IST_H */
+
diff --git a/tinySIP/include/tinysip/transactions/tsip_transac_layer.h b/tinySIP/include/tinysip/transactions/tsip_transac_layer.h
new file mode 100644
index 0000000..acc532c
--- /dev/null
+++ b/tinySIP/include/tinysip/transactions/tsip_transac_layer.h
@@ -0,0 +1,72 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transac.h
+ * @brief SIP transaction layer.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSAC_LAYER_H
+#define TINYSIP_TRANSAC_LAYER_H
+
+#include "tinysip_config.h"
+
+#include "tsip.h"
+#include "tinysip/transactions/tsip_transac.h"
+
+#include "tsk_safeobj.h"
+#include "tsk_list.h"
+
+TSIP_BEGIN_DECLS
+
+typedef struct tsip_transac_layer_s
+{
+ TSK_DECLARE_OBJECT;
+
+ const struct tsip_stack_s *stack;
+
+ tsip_transacs_L_t *transactions;
+
+ TSK_DECLARE_SAFEOBJ;
+}
+tsip_transac_layer_t;
+
+typedef tsk_list_t tsip_transac_layers_L_t;
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transac_layer_def_t;
+
+tsip_transac_layer_t* tsip_transac_layer_create(tsip_stack_t* stack);
+
+tsip_transac_t* tsip_transac_layer_new(const tsip_transac_layer_t *self, tsk_bool_t isCT, const tsip_message_t* msg, tsip_transac_dst_t* dst);
+int tsip_transac_layer_remove(tsip_transac_layer_t *self, const tsip_transac_t *transac);
+int tsip_transac_layer_cancel_by_dialog(tsip_transac_layer_t *self, const struct tsip_dialog_s* dialog);
+
+tsip_transac_t* tsip_transac_layer_find_client(const tsip_transac_layer_t *self, const tsip_message_t* message);
+tsip_transac_t* tsip_transac_layer_find_server(const tsip_transac_layer_t *self, const tsip_message_t* message);
+
+int tsip_transac_layer_handle_incoming_msg(const tsip_transac_layer_t *self, const tsip_message_t* message);
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSAC_LAYER_H */
+
diff --git a/tinySIP/include/tinysip/transactions/tsip_transac_nict.h b/tinySIP/include/tinysip/transactions/tsip_transac_nict.h
new file mode 100644
index 0000000..4052bd0
--- /dev/null
+++ b/tinySIP/include/tinysip/transactions/tsip_transac_nict.h
@@ -0,0 +1,61 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transac_nict.h
+ * @brief SIP Non-INVITE Client Transaction as per RFC 3261 subcaluse 17.1.2.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSAC_NICT_H
+#define TINYSIP_TRANSAC_NICT_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/transactions/tsip_transac.h"
+#include "tinysip/tsip_message.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TRANSAC_NICT(self) ((tsip_transac_nict_t*)(self))
+
+typedef struct tsip_transac_nict
+{
+ TSIP_DECLARE_TRANSAC;
+
+ tsip_request_t* request;
+ tsip_timer_t timerE;
+ tsip_timer_t timerF;
+ tsip_timer_t timerK;
+}
+tsip_transac_nict_t;
+
+tsip_transac_nict_t* tsip_transac_nict_create(int32_t cseq_value, const char* cseq_method, const char* callid, tsip_transac_dst_t* dst);
+int tsip_transac_nict_start(tsip_transac_nict_t *self, const tsip_request_t* request);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transac_nict_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSAC_NICT_H */
+
diff --git a/tinySIP/include/tinysip/transactions/tsip_transac_nist.h b/tinySIP/include/tinysip/transactions/tsip_transac_nist.h
new file mode 100644
index 0000000..f2234a1
--- /dev/null
+++ b/tinySIP/include/tinysip/transactions/tsip_transac_nist.h
@@ -0,0 +1,59 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transac_nist.h
+ * @brief SIP Non-INVITE Server Transaction as per RFC 3261 subclause 17.2.2.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSAC_NIST_H
+#define TINYSIP_TRANSAC_NIST_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/transactions/tsip_transac.h"
+#include "tinysip/tsip_message.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TRANSAC_NIST(self) ((tsip_transac_nist_t*)(self))
+
+typedef struct tsip_transac_nist
+{
+ TSIP_DECLARE_TRANSAC;
+
+ tsip_response_t* lastResponse;
+ tsip_timer_t timerJ;
+}
+tsip_transac_nist_t;
+
+tsip_transac_nist_t* tsip_transac_nist_create(int32_t cseq_value, const char* cseq_method, const char* callid, tsip_transac_dst_t* dst);
+int tsip_transac_nist_start(tsip_transac_nist_t *self, const tsip_request_t* request);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transac_nist_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSAC_NIST_H */
+
diff --git a/tinySIP/include/tinysip/transports/tsip_transport.h b/tinySIP/include/tinysip/transports/tsip_transport.h
new file mode 100644
index 0000000..44ffd16
--- /dev/null
+++ b/tinySIP/include/tinysip/transports/tsip_transport.h
@@ -0,0 +1,187 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transport.h
+ * @brief SIP transport.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSPORT_H
+#define TINYSIP_TRANSPORT_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_message.h"
+
+#include "tnet_transport.h"
+
+#include "tsk_object.h"
+#include "tsk_list.h"
+#include "tsk_string.h"
+
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TRANSPORT(self) ((tsip_transport_t*)(self))
+
+enum {
+ TSIP_TRANSPORT_IDX_UDP,
+ TSIP_TRANSPORT_IDX_DTLS,
+ TSIP_TRANSPORT_IDX_TCP,
+ TSIP_TRANSPORT_IDX_TLS,
+ TSIP_TRANSPORT_IDX_WS,
+ TSIP_TRANSPORT_IDX_WSS,
+
+ TSIP_TRANSPORT_IDX_MAX
+};
+
+typedef struct tsip_transport_idx_xs
+{
+ int idx;
+ const char* name;
+ enum tnet_socket_type_e type;
+}
+tsip_transport_idx_xt;
+
+const tsip_transport_idx_xt* tsip_transport_get_by_name(const char* name);
+int tsip_transport_get_idx_by_name(const char* name);
+enum tnet_socket_type_e tsip_transport_get_type_by_name(const char* name);
+
+typedef struct tsip_transport_stream_peer_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tnet_fd_t local_fd; // not owner: do not close
+ enum tnet_socket_type_e type;
+ tsk_bool_t connected;
+ uint64_t time_latest_activity; // in milliseconds
+ uint64_t time_added; // in milliseconds
+ tsk_bool_t got_valid_sip_msg; // whether we got at least one valid SIP message on this peer
+
+ tsk_buffer_t *rcv_buff_stream;
+ tsk_buffer_t *snd_buff_stream;
+
+ // list of dialogs managed by this peer
+ tsk_strings_L_t *dialogs_cids;
+
+ // temp buffers used to send/recv websocket data before (un)masking
+ struct{
+ void* rcv_buffer;
+ uint64_t rcv_buffer_size;
+ void* snd_buffer;
+ uint64_t snd_buffer_size;
+ tsk_bool_t handshaking_done;
+ } ws;
+
+ tnet_ip_t remote_ip;
+ tnet_port_t remote_port;
+}
+tsip_transport_stream_peer_t;
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transport_stream_peer_def_t;
+typedef tsk_list_t tsip_transport_stream_peers_L_t;
+
+typedef struct tsip_transport_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsk_bool_t initialized;
+
+ int32_t idx;
+
+ const struct tsip_stack_s *stack;
+
+ tnet_socket_type_t type;
+ struct sockaddr_storage pcscf_addr;
+ tnet_fd_t connectedFD;
+ tnet_transport_handle_t *net_transport;
+
+ const char *scheme;
+ const char *protocol;
+ const char *via_protocol;
+ const char *service; /**< NAPTR service name */
+
+ tsip_transport_stream_peers_L_t* stream_peers;
+ int32_t stream_peers_count;
+}
+tsip_transport_t;
+
+#define TSIP_DECLARE_TRANSPORT tsip_transport_t __transport__
+typedef tsk_list_t tsip_transports_L_t; /**< List of @ref tsip_transport_t elements. */
+
+int tsip_transport_init(tsip_transport_t* self, tnet_socket_type_t type, const struct tsip_stack_s *stack, const char *host, tnet_port_t port, const char* description);
+int tsip_transport_deinit(tsip_transport_t* self);
+
+int tsip_transport_tls_set_certs(tsip_transport_t *self, const char* ca, const char* pbk, const char* pvk);
+tsk_size_t tsip_transport_send(const tsip_transport_t* self, const char *branch, tsip_message_t *msg, const char* destIP, int32_t destPort);
+tsk_size_t tsip_transport_send_raw(const tsip_transport_t* self, const char* dst_host, tnet_port_t dst_port, const void* data, tsk_size_t size, const char* callid);
+tsk_size_t tsip_transport_send_raw_ws(const tsip_transport_t* self, tnet_fd_t local_fd, const void* data, tsk_size_t size, const char* callid);
+tsip_uri_t* tsip_transport_get_uri(const tsip_transport_t *self, int lr);
+
+int tsip_transport_add_stream_peer_2(tsip_transport_t *self, tnet_fd_t local_fd, enum tnet_socket_type_e type, tsk_bool_t connected, const char* remote_host, tnet_port_t remote_port);
+#define tsip_transport_add_stream_peer(self, local_fd, type, connected) tsip_transport_add_stream_peer_2((self), (local_fd), (type), (connected), tsk_null, 0)
+#define tsip_transport_stream_peers_lock(self) tsk_list_lock((self)->stream_peers)
+#define tsip_transport_stream_peers_unlock(self) tsk_list_unlock((self)->stream_peers)
+tsip_transport_stream_peer_t* tsip_transport_find_stream_peer_by_local_fd(tsip_transport_t *self, tnet_fd_t local_fd);
+tsip_transport_stream_peer_t* tsip_transport_pop_stream_peer_by_local_fd(tsip_transport_t *self, tnet_fd_t local_fd);
+tsip_transport_stream_peer_t* tsip_transport_find_stream_peer_by_remote_ip(tsip_transport_t *self, const char* remote_ip, tnet_port_t remote_port, enum tnet_socket_type_e type);
+tsk_bool_t tsip_transport_have_stream_peer_with_remote_ip(tsip_transport_t *self, const char* remote_ip, tnet_port_t remote_port, enum tnet_socket_type_e type);
+tsk_bool_t tsip_transport_have_stream_peer_with_local_fd(tsip_transport_t *self, tnet_fd_t local_fd);
+int tsip_transport_remove_stream_peer_by_local_fd(tsip_transport_t *self, tnet_fd_t local_fd);
+int tsip_transport_remove_callid_from_stream_peers(tsip_transport_t *self, const char* callid, tsk_bool_t* removed);
+tsk_bool_t tsip_transport_stream_peer_have_callid(const tsip_transport_stream_peer_t* self, const char* callid);
+int tsip_transport_stream_peer_add_callid(tsip_transport_stream_peer_t* self, const char* callid);
+int tsip_transport_stream_peer_remove_callid(tsip_transport_stream_peer_t* self, const char* callid, tsk_bool_t *removed);
+int tsip_transport_stream_peers_cleanup(tsip_transport_t *self);
+
+#define tsip_transport_tls_set_certs(transport, ca, pbk, pvk, verify) (transport ? tnet_transport_tls_set_certs(transport->net_transport, ca, pbk, pvk, verify) : -1)
+#define tsip_transport_start(transport) (transport ? tnet_transport_start(transport->net_transport) : -1)
+#define tsip_transport_isready(transport) (transport ? tnet_transport_isready(transport->net_transport) : -1)
+#define tsip_transport_issecure(transport) (transport ? tnet_transport_issecure(transport->net_transport) : 0)
+#define tsip_transport_isconnected(transport) (transport ? tnet_transport_isconnected(transport->net_transport, transport->connectedFD) : 0)
+#define tsip_transport_get_description(transport) (transport ? tnet_transport_get_description(transport->net_transport) : 0)
+#define tsip_transport_get_ip_n_port(transport, ip, port) (transport ? tnet_transport_get_ip_n_port(transport->net_transport, transport->connectedFD, ip, port) : -1)
+#define tsip_transport_get_public_ip_n_port(transport, ip, port) (transport ? tnet_transport_get_public_ip_n_port(transport->net_transport, transport->connectedFD, ip, port) : -1)
+
+#define tsip_transport_connectto(transport, host, port, type) (transport ? (transport->connectedFD=tnet_transport_connectto(transport->net_transport, host, port, type)) : TNET_INVALID_FD)
+#define tsip_transport_connectto_2(transport, host, port) (transport ? (transport->connectedFD=tnet_transport_connectto_2(transport->net_transport, host, port)) : TNET_INVALID_FD)
+
+#define tsip_transport_set_callback(transport, callback, callback_data) (transport ? tnet_transport_set_callback(transport->net_transport, callback, callback_data) : -1)
+
+#define tsip_transport_have_socket(transport, fd) (transport ? tnet_transport_have_socket(transport->net_transport, fd) : 0)
+#define tsip_transport_add_socket(transport, fd, type, take_ownership, isClient) (transport ? tnet_transport_add_socket(transport->net_transport, fd, type, take_ownership, isClient, tsk_null) : -1)
+#define tsip_transport_remove_socket(transport, fd) (transport ? tnet_transport_remove_socket(transport->net_transport, fd) : -1)
+
+//#define tsip_transport_get_socket_type(transport) (transport ? tnet_transport_get_socket_type(transport->net_transport) : tnet_socket_type_invalid)
+
+#define tsip_transport_shutdown(transport) (transport ? tnet_transport_shutdown(transport->net_transport) : -1)
+
+tsip_transport_t* tsip_transport_create(struct tsip_stack_s* stack, const char* host, tnet_port_t port, tnet_socket_type_t type, const char* description);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transport_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSPORT_H */
+
+
diff --git a/tinySIP/include/tinysip/transports/tsip_transport_ipsec.h b/tinySIP/include/tinysip/transports/tsip_transport_ipsec.h
new file mode 100644
index 0000000..d67c3ad
--- /dev/null
+++ b/tinySIP/include/tinysip/transports/tsip_transport_ipsec.h
@@ -0,0 +1,86 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transport_ipsec.h
+ * @brief SIP/IPSec transport.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSPORT_IPSEC_H
+#define TINYSIP_TRANSPORT_IPSEC_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/transports/tsip_transport.h"
+
+#include "tinysip/headers/tsip_header_Security_Verify.h"
+
+#include "tipsec.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TRANSPORT_IPSEC(self) ((tsip_transport_ipsec_t*)(self))
+
+typedef struct tsip_ipsec_association_s
+{
+ TSK_DECLARE_OBJECT;
+
+ const tsip_transport_t* transport;
+
+ tipsec_ctx_t* ctx;
+
+ tnet_socket_t *socket_uc;
+ tnet_socket_t *socket_us;
+
+ tnet_ip_t ip_remote;
+ tnet_ip_t ip_local;
+ tnet_port_t port_local;
+}
+tsip_ipsec_association_t;
+
+typedef struct tsip_transport_ipsec_s
+{
+ TSIP_DECLARE_TRANSPORT;
+
+ tsip_header_Security_Verifies_L_t* secVerifies;
+
+ tsip_ipsec_association_t* asso_active;
+ tsip_ipsec_association_t* asso_temporary;
+}
+tsip_transport_ipsec_t;
+
+tsip_transport_ipsec_t* tsip_transport_ipsec_create(struct tsip_stack_s* stack, const char* host, tnet_port_t port, tnet_socket_type_t type, const char* description);
+
+int tsip_transport_ipsec_createTempSAs(tsip_transport_ipsec_t* self);
+int tsip_transport_ipsec_ensureTempSAs(tsip_transport_ipsec_t* self, const tsip_response_t *r401_407, int64_t expires);
+int tsip_transport_ipsec_startSAs(tsip_transport_ipsec_t* self, const tipsec_key_t* ik, const tipsec_key_t* ck);
+int tsip_transport_ipsec_cleanupSAs(tsip_transport_ipsec_t* self);
+tnet_fd_t tsip_transport_ipsec_getFD(tsip_transport_ipsec_t* self, int isRequest);
+int tsip_transport_ipsec_updateMSG(tsip_transport_ipsec_t* self, tsip_message_t *msg);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transport_ipsec_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSPORT_IPSEC_H */
diff --git a/tinySIP/include/tinysip/transports/tsip_transport_layer.h b/tinySIP/include/tinysip/transports/tsip_transport_layer.h
new file mode 100644
index 0000000..35c4380
--- /dev/null
+++ b/tinySIP/include/tinysip/transports/tsip_transport_layer.h
@@ -0,0 +1,77 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transport_layer.h
+ * @brief SIP transport layer.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TRANSPORT_LAYER_H
+#define TINYSIP_TRANSPORT_LAYER_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/transports/tsip_transport.h"
+#include "tinysip/tsip_message.h"
+#include "tsip.h"
+
+TSIP_BEGIN_DECLS
+
+typedef struct tsip_transport_layer_s
+{
+ TSK_DECLARE_OBJECT;
+
+ const tsip_stack_t *stack;
+
+ tsk_bool_t running;
+ tsip_transports_L_t *transports;
+}
+tsip_transport_layer_t;
+
+tsip_transport_layer_t* tsip_transport_layer_create(tsip_stack_t *stack);
+const tsip_transport_t* tsip_transport_layer_find_by_type(const tsip_transport_layer_t* self, tnet_socket_type_t type);
+const tsip_transport_t* tsip_transport_layer_find_by_idx(const tsip_transport_layer_t* self, int32_t idx);
+
+int tsip_transport_layer_add(tsip_transport_layer_t* self, const char* local_host, tnet_port_t local_port, tnet_socket_type_t type, const char* description);
+int tsip_transport_layer_remove(tsip_transport_layer_t* self, const char* description);
+
+int tsip_transport_layer_send(const tsip_transport_layer_t* self, const char *branch, tsip_message_t *msg);
+
+int tsip_transport_createTempSAs(const tsip_transport_layer_t *self);
+int tsip_transport_ensureTempSAs(const tsip_transport_layer_t *self, const tsip_response_t *r401_407, int64_t expires);
+int tsip_transport_startSAs(const tsip_transport_layer_t* self, const void* ik, const void* ck);
+int tsip_transport_cleanupSAs(const tsip_transport_layer_t *self);
+
+int tsip_transport_layer_remove_callid_from_stream_peers(tsip_transport_layer_t *self, const char* callid);
+tsk_bool_t tsip_transport_layer_have_stream_peer_with_remote_ip(const tsip_transport_layer_t *self, const char* remote_ip, tnet_port_t remote_port);
+
+int tsip_transport_layer_start(tsip_transport_layer_t* self);
+int tsip_transport_layer_shutdown(tsip_transport_layer_t* self);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_transport_layer_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSPORT_LAYER_H */
+
diff --git a/tinySIP/include/tinysip/transports/tsip_transport_tls.h b/tinySIP/include/tinysip/transports/tsip_transport_tls.h
new file mode 100644
index 0000000..106a562
--- /dev/null
+++ b/tinySIP/include/tinysip/transports/tsip_transport_tls.h
@@ -0,0 +1,41 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_transport_tls.h
+ * @brief SIP/TLS transport.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+ */
+#ifndef TINYSIP_TRANSPORT_TLS_H
+#define TINYSIP_TRANSPORT_TLS_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/transports/tsip_transport.h"
+
+TSIP_BEGIN_DECLS
+
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TRANSPORT_TLS_H */
diff --git a/tinySIP/include/tinysip/tsip_action.h b/tinySIP/include/tinysip/tsip_action.h
new file mode 100644
index 0000000..868421a
--- /dev/null
+++ b/tinySIP/include/tinysip/tsip_action.h
@@ -0,0 +1,171 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_action.h
+ * @brief SIP action.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TSIP_ACTION_H
+#define TSIP_ACTION_H
+
+#include "tinysip_config.h"
+
+#include "tsk_buffer.h"
+#include "tsk_options.h"
+#include "tsk_params.h"
+
+#include "tinymedia/tmedia_common.h"
+#include "tinymedia/tmedia_params.h"
+
+TSIP_BEGIN_DECLS
+
+typedef uint64_t tsip_action_id_t;
+#define TSIP_ACTION_INVALID_ID 0
+#define TSIP_ACTION_INVALID_HANDLE tsk_null
+
+/** List of all supported actions */
+typedef enum tsip_action_type_e
+{
+ //! Used as configuration action
+ tsip_atype_config,
+ tsip_atype_dtmf_send,
+
+ /* === REGISTER == */
+ tsip_atype_register, /**< Sends SIP REGISTER request */
+ //! Unregister by sending SIP REGISTER request with expires value equals to zero
+#define tsip_atype_unregister tsip_atype_hangup
+
+ /* === SUBSCRIBE === */
+ tsip_atype_subscribe, /**< Sends SIP SUBSCRIBE request */
+ //! Unsubsribe by sending SIP SUBSCRIBE request with expires value equals to zero
+#define tsip_atype_unsubscribe tsip_atype_hangup
+
+ /* === MESSAGE === */
+ tsip_atype_message_send, /**< Sends SIP MESSAGE request */
+
+ /* === INFO === */
+ tsip_atype_info_send, /**< Sends SIP INFO request */
+
+ /* === PUBLISH === */
+ tsip_atype_publish, /**< Sends SIP PUBLISH request */
+ //! Unpublish by sending SIP PUBLISH request with expires value equals to zero
+#define tsip_atype_unpublish tsip_atype_hangup
+
+ /* === OPTIONS === */
+ tsip_atype_options_send, /**< Sends SIP OPTIONS request */
+
+ /* === INVITE === */
+ tsip_atype_invite, /**< Sends SIP INVITE/reINVITE request */
+ tsip_atype_hold, /**< Puts the session on hold state */
+ tsip_atype_resume, /**< Resumes a previously held session */
+ tsip_atype_ect, /**< Transfer the call */
+ tsip_atype_ect_accept, /**< Accept call transfer request */
+ tsip_atype_ect_reject, /**< Reject call transfer request */
+ tsip_atype_ect_lnotify, /**< Intra-Dialog notify. Never called by the end-user */
+ tsip_atype_lmessage, /**< Large message (MSRP). The session must be connected */
+#define tsip_atype_bye tsip_atype_hangup
+
+
+ /* === common === */
+ //! Accept incoming call (INVITE) or message (SIP MESSAGE)
+ tsip_atype_accept,
+ //! Reject incoming call (INVITE) or message (SIP MESSAGE)
+#define tsip_atype_reject tsip_atype_hangup
+ //! Cancel an outgoing request
+ tsip_atype_cancel,
+ //! Hangup any SIP dialog (BYE, unREGISTER, unSUBSCRIBE ...). If the dialog is in early state, then it will be canceled.
+ tsip_atype_hangup,
+ //! Shutdown a SIP dialog. Should only be called by the stack.
+ tsip_atype_shutdown,
+ //! Signal transport error. Should only be called by the stack.
+ tsip_atype_transport_error,
+}
+tsip_action_type_t;
+
+/* internal enum used to pass parameters from the application layer to the stack */
+typedef enum tsip_action_param_type_e
+{
+ aptype_null = 0,
+
+ aptype_header,
+ aptype_config,
+ aptype_payload,
+ aptype_resp_line,
+ aptype_media_type,
+ aptype_media,
+}
+tsip_action_param_type_t;
+
+#define TSIP_ACTION_SET_HEADER(NAME_STR, VALUE_STR) aptype_header, (const char*)NAME_STR, (const char*)VALUE_STR
+#define TSIP_ACTION_SET_PAYLOAD(PAY_PTR, PAY_SIZE) aptype_payload, (const void*)PAY_PTR, (tsk_size_t)PAY_SIZE
+#define TSIP_ACTION_SET_RESP_LINE(CODE_INT, PHRASE_STR) aptype_resp_line, (int32_t)CODE_INT, (const char*)PHRASE_STR
+#define TSIP_ACTION_SET_CONFIG(ACTION_CONFIG_HANDLE) aptype_config, (const tsip_action_handle_t*)ACTION_CONFIG_HANDLE
+#define TSIP_ACTION_SET_MEDIA_TYPE(TYPE_ENUM) aptype_media_type, (enum tmedia_type_e)TYPE_ENUM
+#define TSIP_ACTION_SET_MEDIA(...) aptype_media, ##__VA_ARGS__
+#define TSIP_ACTION_SET_NULL() aptype_null
+
+/* private action object. public api should use tsip_action_handle_t. */
+typedef struct tsip_action_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsip_action_type_t type;
+ tsk_params_L_t *headers;
+ tsk_buffer_t* payload;
+
+ struct{
+ short code;
+ char* phrase;
+ } line_resp;
+
+ struct{
+ tmedia_type_t type;
+ tmedia_params_L_t *params;
+ } media;
+
+ struct{
+ int volume; // useless (manager will always use "10")
+ int event;
+ } dtmf;
+
+ struct{
+ char* to;
+ } ect;
+}
+tsip_action_t;
+
+/**< Handle to SIP action */
+typedef void tsip_action_handle_t;
+
+TINYSIP_API tsip_action_handle_t* tsip_action_create(tsip_action_type_t type, ...);
+TINYSIP_API int tsip_action_set(tsip_action_handle_t* self, ...);
+
+typedef tsk_list_t tsip_actions_L_t; /**< List of @ref tsip_action_handle_t elements. */
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_action_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TSIP_ACTION_H */
+
diff --git a/tinySIP/include/tinysip/tsip_event.h b/tinySIP/include/tinysip/tsip_event.h
new file mode 100644
index 0000000..91e8f4e
--- /dev/null
+++ b/tinySIP/include/tinysip/tsip_event.h
@@ -0,0 +1,113 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_event.h
+ * @brief SIP event.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_EVENT_H
+#define TINYSIP_TSIP_EVENT_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_ssession.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_EVENT(self) ((tsip_event_t*)(self))
+
+typedef enum tsip_event_type_e
+{
+ tsip_event_invite,
+ tsip_event_message,
+ tsip_event_info,
+ tsip_event_options,
+ tsip_event_publish,
+ tsip_event_register,
+ tsip_event_subscribe,
+
+ tsip_event_dialog,
+ tsip_event_stack,
+}
+tsip_event_type_t;
+
+/* SIP codes associated to an internal event */
+// 100-699 are reserved codes
+
+// 7xx ==> errors @tinyWRAP
+#define tsip_event_code_dialog_transport_error 702
+#define tsip_event_code_dialog_global_error 703
+#define tsip_event_code_dialog_message_error 704
+
+// 8xx ==> success @tinyWRAP
+#define tsip_event_code_dialog_request_incoming 800
+#define tsip_event_code_dialog_request_outgoing 802
+#define tsip_event_code_dialog_request_cancelled 803
+#define tsip_event_code_dialog_request_sent 804
+
+// 9xx ==> Informational @tinyWRAP
+#define tsip_event_code_dialog_connecting 900
+#define tsip_event_code_dialog_connected 901
+#define tsip_event_code_dialog_terminating 902
+#define tsip_event_code_dialog_terminated 903
+#define tsip_event_code_stack_starting 950
+#define tsip_event_code_stack_started 951
+#define tsip_event_code_stack_stopping 952
+#define tsip_event_code_stack_stopped 953
+#define tsip_event_code_stack_failed_to_start 954
+#define tsip_event_code_stack_failed_to_stop 955
+#define tsip_event_code_stack_disconnected 956
+
+
+typedef struct tsip_event_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsip_ssession_handle_t* ss;
+
+ short code;
+ char *phrase;
+
+ tsip_event_type_t type;
+ struct tsip_message_s *sipmessage;
+
+ //! copy of stack user data (needed by sessionless events)
+ const void* userdata;
+}
+tsip_event_t;
+#define TSIP_DECLARE_EVENT tsip_event_t __sipevent__
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_event_def_t;
+
+int tsip_event_init(tsip_event_t* self, tsip_ssession_t* ss, short code, const char *phrase, const struct tsip_message_s* sipmessage, tsip_event_type_t type);
+int tsip_event_signal(tsip_event_type_t type, tsip_ssession_t* ss, short code, const char *phrase);
+int tsip_event_signal_2(tsip_event_type_t type, tsip_ssession_t* ss, short code, const char *phrase, const struct tsip_message_s* sipmessage);
+int tsip_event_deinit(tsip_event_t* self);
+
+typedef int (*tsip_stack_callback_f)(const tsip_event_t *sipevent);
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TSIP_EVENT_H */
diff --git a/tinySIP/include/tinysip/tsip_message.h b/tinySIP/include/tinysip/tsip_message.h
new file mode 100644
index 0000000..d0442ea
--- /dev/null
+++ b/tinySIP/include/tinysip/tsip_message.h
@@ -0,0 +1,216 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_message.h
+ * @brief Represents a SIP message. A SIP message is either a request from a client to a server, or a
+ * response from a server to a client. See RFC 3261 suc-bclause 7.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TSIP_MESSAGE_H
+#define TSIP_MESSAGE_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_message_common.h"
+
+#include "tinysip/headers/tsip_header_Call_ID.h"
+#include "tinysip/headers/tsip_header_Contact.h"
+#include "tinysip/headers/tsip_header_Content_Length.h"
+#include "tinysip/headers/tsip_header_Content_Type.h"
+#include "tinysip/headers/tsip_header_CSeq.h"
+#include "tinysip/headers/tsip_header_Expires.h"
+#include "tinysip/headers/tsip_header_From.h"
+#include "tinysip/headers/tsip_header_P_Access_Network_Info.h"
+#include "tinysip/headers/tsip_header_To.h"
+#include "tinysip/headers/tsip_header_Via.h"
+
+#include "tnet_types.h"
+#include "tnet_socket.h"
+
+#include "tsk_object.h"
+#include "tsk_buffer.h"
+
+TSIP_BEGIN_DECLS
+
+///**
+// * @struct tsip_request_line_t
+// *
+// * @brief Defines SIP request header line.
+// * ABNF: Request-Line = Method SP Request-URI SP SIP-Version CRLF
+// * Ref: RFC 3261 subclause 7.1.
+// * @sa tsip_status_line_t.
+// *
+// * @author Mamadou
+// * @date 12/3/2009
+//**/
+//typedef struct tsip_request_line_s
+//{
+// char *method; /**< SIP method name. e.g REGISTER, ACK or INVITE.*/
+// tsip_uri_t *uri; /**< The Request-URI is a SIP or SIPS URI as described in Section 19.1 or a general URI (RFC 2396 [5]). It indicates
+// the user or service to which this request is being addressed. The Request-URI MUST NOT contain unescaped spaces or control
+// characters and MUST NOT be enclosed in "<>". */
+//}
+//tsip_request_line_t;
+//
+///**
+// * @struct tsip_status_line_t
+// *
+// * @brief Defines SIP response status line.
+// * ABNF: Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
+// * Ref: RFC 3261 subclause 7.2.
+// * @sa tsip_request_line_t.
+// *
+// * @author Mamadou
+// * @date 12/3/2009
+//**/
+//typedef struct tsip_status_line_s
+//{
+// short status_code; /**< 3-digit integer result code that indicates the outcome of an attempt to understand and satisfy a request. */
+// char *reason_phrase; /**< Textual description related to the status code. */
+//}
+//tsip_status_line_t;
+
+/**
+ * @struct tsip_message_t
+ *
+ * @brief Represents a SIP message. A SIP message is either a request from a client to a server,
+ * or a response from a server to a client. See RFC 3261 suc-bclause 7.
+ * You must call @ref tsip_message_create to create a sip message and TSK_OBJECT_SAFE_FREE to free the message.
+ *
+ * @author Mamadou
+ * @date 12/2/2009
+**/
+typedef struct tsip_message_s
+{
+ TSK_DECLARE_OBJECT;
+
+ char *sip_version; /**< The SIP version. Only 'SIP/2.0' is supported. */
+ tsip_message_type_t type; /**< The type of this SIP message. */
+
+ /* Request Line */
+ union{
+ struct{
+ char *method; /**< SIP method name. e.g REGISTER, ACK or INVITE.*/
+ tsip_uri_t *uri; /**< The Request-URI is a SIP or SIPS URI as described in Section 19.1 or a general URI (RFC 2396 [5]). It indicates
+ the user or service to which this request is being addressed. The Request-URI MUST NOT contain unescaped spaces or control
+ characters and MUST NOT be enclosed in "<>". */
+ tsip_request_type_t request_type;
+ } request;
+ struct{
+ short status_code; /**< 3-digit integer result code that indicates the outcome of an attempt to understand and satisfy a request. */
+ char *reason_phrase; /**< Textual description related to the status code. */
+ } response;
+ } line;
+
+
+ /*== MOST COMMON HEADERS. */
+ tsip_header_Via_t *firstVia; /**< First Via header. */
+ tsip_header_From_t *From;
+ tsip_header_To_t *To;
+ tsip_header_Contact_t *Contact;
+ tsip_header_Call_ID_t *Call_ID;
+ tsip_header_CSeq_t *CSeq;
+ tsip_header_Expires_t *Expires;
+
+ tsip_header_Content_Type_t *Content_Type;
+ tsip_header_Content_Length_t *Content_Length;
+ tsk_buffer_t *Content;
+
+ /*== OTHER HEADERS*/
+ tsip_headers_L_t *headers;
+
+ /*== to hack the message */
+ char* sigcomp_id;
+ tnet_fd_t local_fd;
+ struct sockaddr_storage remote_addr; // Only valid for Dgram
+ tsk_bool_t update;
+ enum tnet_socket_type_e src_net_type;
+ enum tnet_socket_type_e dst_net_type;
+ char* dst_address;
+ tnet_port_t dst_port;
+}
+tsip_message_t;
+
+typedef tsip_message_t tsip_request_t; /**< SIP request message. */
+typedef tsip_message_t tsip_response_t; /**< SIP response message. */
+
+
+TINYSIP_API int tsip_message_add_header(tsip_message_t *self, const tsip_header_t *hdr);
+TINYSIP_API int tsip_message_add_headers(tsip_message_t *self, ...);
+TINYSIP_API int tsip_message_add_content(tsip_message_t *self, const char* content_type, const void* content, tsk_size_t size);
+
+#if defined(__SYMBIAN32__) && 0
+static void TSIP_MESSAGE_ADD_HEADER(tsip_message_t *self, ...)
+ {
+ va_list ap;
+ tsip_header_t *header;
+ const tsk_object_def_t *objdef;
+
+ va_start(ap, self);
+ objdef = va_arg(ap, const tsk_object_def_t*);
+ header = (tsip_header_t *)tsk_object_new_2(objdef, &ap);
+ va_end(ap);
+
+ tsip_message_add_header(self, header);
+ tsk_object_unref(header);
+ }
+#else
+#define TSIP_MESSAGE_ADD_HEADER(self, objdef, ...) \
+ { \
+ tsip_header_t *header = (tsip_header_t *)tsk_object_new(objdef, ##__VA_ARGS__); \
+ tsip_message_add_header(self, header); \
+ tsk_object_unref(header); \
+ }
+#endif
+
+TINYSIP_API const tsip_header_t *tsip_message_get_headerAt(const tsip_message_t *self, tsip_header_type_t type, tsk_size_t index);
+TINYSIP_API const tsip_header_t *tsip_message_get_headerLast(const tsip_message_t *self, tsip_header_type_t type);
+TINYSIP_API const tsip_header_t *tsip_message_get_header(const tsip_message_t *self, tsip_header_type_t type);
+TINYSIP_API tsk_bool_t tsip_message_allowed(const tsip_message_t *self, const char* method);
+TINYSIP_API tsk_bool_t tsip_message_supported(const tsip_message_t *self, const char* option);
+TINYSIP_API tsk_bool_t tsip_message_required(const tsip_message_t *self, const char* option);
+
+
+
+TINYSIP_API int64_t tsip_message_getExpires(const tsip_message_t *message);
+TINYSIP_API uint32_t tsip_message_getContent_length(const tsip_message_t *message);
+TINYSIP_API int32_t tsip_message_getCSeq(const tsip_message_t *message);
+
+TINYSIP_API int tsip_message_tostring(const tsip_message_t *self, tsk_buffer_t *output);
+
+TINYSIP_API tsip_request_type_t tsip_request_get_type(const char* method);
+TINYSIP_API tsip_request_t *tsip_request_new(const char* method, const tsip_uri_t *request_uri, const tsip_uri_t *from, const tsip_uri_t *to, const char *call_id, int32_t cseq);
+TINYSIP_API tsip_response_t *tsip_response_new(short status_code, const char* reason_phrase, const tsip_request_t *request);
+
+TINYSIP_API tsip_message_t* tsip_message_create();
+TINYSIP_API tsip_request_t* tsip_request_create(const char* method, const tsip_uri_t* uri);
+TINYSIP_API tsip_response_t* tsip_response_create(const tsip_request_t* request, short status_code, const char* reason_phrase);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_message_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TSIP_MESSAGE_H */
+
diff --git a/tinySIP/include/tinysip/tsip_message_common.h b/tinySIP/include/tinysip/tsip_message_common.h
new file mode 100644
index 0000000..c04131c
--- /dev/null
+++ b/tinySIP/include/tinysip/tsip_message_common.h
@@ -0,0 +1,140 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_message_common.h
+ * @brief Common macros and enums for SIP messages.
+ * Mostly used to avoid circular #includes.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TSIP_MESSAGE_COMMON_H
+#define TSIP_MESSAGE_COMMON_H
+
+#include "tinysip_config.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_MESSAGE_VERSION_10 "SIP/1.0"
+#define TSIP_MESSAGE_VERSION_20 "SIP/2.0"
+#define TSIP_MESSAGE_VERSION_DEFAULT TSIP_MESSAGE_VERSION_20
+
+#define TSIP_MESSAGE_IS_REQUEST(self) ((self) ? (self)->type == tsip_request : tsk_false)
+#define TSIP_MESSAGE_IS_RESPONSE(self) ((self) ? (self)->type == tsip_response : tsk_false)
+
+#define TSIP_MESSAGE(self) ((tsip_message_t*)(self))
+#define TSIP_MESSAGE_AS_RESPONSE(self) (TSIP_MESSAGE_IS_RESPONSE((self)) ? (tsip_response_t*)(self) : tsk_null)
+#define TSIP_MESSAGE_AS_REQUEST(self) (TSIP_MESSAGE_IS_REQUEST((self)) ? (tsip_request_t*)(self) : tsk_null)
+
+
+#define TSIP_RESPONSE_CODE(self) (TSIP_MESSAGE_IS_RESPONSE((self)) ? (self)->line.response.status_code : 0)
+#define TSIP_RESPONSE_PHRASE(self) (TSIP_MESSAGE_IS_RESPONSE((self)) ? (self)->line.response.reason_phrase : tsk_null)
+
+#define TSIP_REQUEST_METHOD(self) ((self)->line.request.method)
+#define TSIP_REQUEST_URI(self) ((self)->line.request.uri)
+
+#define TSIP_MESSAGE_CSEQ_METHOD(self) ((self)->CSeq ? (self)->CSeq->method : tsk_null)
+#define TSIP_MESSAGE_HAS_CONTENT(self) ((self) && (self)->Content && (self)->Content->data)
+#define TSIP_MESSAGE_CONTENT_LENGTH(self) (uint32_t)(((self) && (self)->Content_Length) ? (self)->Content_Length->length : 0)
+#define TSIP_MESSAGE_CONTENT_DATA(self) (TSIP_MESSAGE_HAS_CONTENT(self) ? (self)->Content->data : tsk_null)
+#define TSIP_MESSAGE_CONTENT_DATA_LENGTH(self) (TSIP_MESSAGE_HAS_CONTENT(self) ? (self)->Content->size : 0)
+#define TSIP_MESSAGE_CONTENT(self) (TSIP_MESSAGE_HAS_CONTENT(self) ? (self)->Content : tsk_null)
+#define TSIP_MESSAGE_CONTENT_TYPE(self) (((self) && (self)->Content_Type) ? (self)->Content_Type->type : tsk_null)
+
+#define TSIP_REQUEST_IS_ACK(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_ACK))
+#define TSIP_REQUEST_IS_BYE(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_BYE))
+#define TSIP_REQUEST_IS_CANCEL(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_CANCEL))
+#define TSIP_REQUEST_IS_INVITE(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_INVITE))
+#define TSIP_REQUEST_IS_OPTIONS(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_OPTIONS))
+#define TSIP_REQUEST_IS_REGISTER(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_REGISTER))
+#define TSIP_REQUEST_IS_SUBSCRIBE(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_SUBSCRIBE))
+#define TSIP_REQUEST_IS_NOTIFY(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_NOTIFY))
+#define TSIP_REQUEST_IS_REFER(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_REFER))
+#define TSIP_REQUEST_IS_INFO(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_INFO))
+#define TSIP_REQUEST_IS_UPDATE(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_UPDATE))
+#define TSIP_REQUEST_IS_MESSAGE(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_MESSAGE))
+#define TSIP_REQUEST_IS_PUBLISH(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_PUBLISH))
+#define TSIP_REQUEST_IS_PRACK(self) ((self) && TSIP_MESSAGE_IS_REQUEST((self)) &&((self)->line.request.request_type==tsip_PRACK))
+
+#define TSIP_RESPONSE_IS_TO_ACK(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_ACK))
+#define TSIP_RESPONSE_IS_TO_BYE(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_BYE))
+#define TSIP_RESPONSE_IS_TO_CANCEL(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_CANCEL))
+#define TSIP_RESPONSE_IS_TO_INVITE(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_INVITE))
+#define TSIP_RESPONSE_IS_TO_OPTIONS(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_OPTIONS))
+#define TSIP_RESPONSE_IS_TO_REGISTER(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_REGISTER))
+#define TSIP_RESPONSE_IS_TO_SUBSCRIBE(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_SUBSCRIBE))
+#define TSIP_RESPONSE_IS_TO_NOTIFY(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_NOTIFY))
+#define TSIP_RESPONSE_IS_TO_REFER(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_REFER))
+#define TSIP_RESPONSE_IS_TO_INFO(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_INFO))
+#define TSIP_RESPONSE_IS_TO_UPDATE(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_UPDATE))
+#define TSIP_RESPONSE_IS_TO_MESSAGE(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_MESSAGE))
+#define TSIP_RESPONSE_IS_TO_PUBLISH(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_PUBLISH))
+#define TSIP_RESPONSE_IS_TO_PRACK(self) ((self) && TSIP_MESSAGE_IS_RESPONSE((self)) && (self)->CSeq &&((self)->CSeq->type==tsip_PRACK))
+
+
+#define TSIP_RESPONSE_IS(self, code) (TSIP_RESPONSE_CODE((self)) == code)
+#define TSIP_RESPONSE_IS_NXX(self, N) (TSIP_MESSAGE_IS_RESPONSE((self)) && N##00<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= N##99)
+#define TSIP_RESPONSE_IS_1XX(self) TSIP_RESPONSE_IS_NXX(self, 1)
+#define TSIP_RESPONSE_IS_2XX(self) TSIP_RESPONSE_IS_NXX(self, 2)
+#define TSIP_RESPONSE_IS_3XX(self) TSIP_RESPONSE_IS_NXX(self, 3)
+#define TSIP_RESPONSE_IS_4XX(self) TSIP_RESPONSE_IS_NXX(self, 4)
+#define TSIP_RESPONSE_IS_5XX(self) TSIP_RESPONSE_IS_NXX(self, 5)
+#define TSIP_RESPONSE_IS_6XX(self) TSIP_RESPONSE_IS_NXX(self, 6)
+#define TSIP_RESPONSE_IS_23456(self) (TSIP_MESSAGE_IS_RESPONSE((self)) && 200<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= 699)
+#define TSIP_RESPONSE_IS_3456(self) (TSIP_MESSAGE_IS_RESPONSE((self)) && 300<= TSIP_RESPONSE_CODE((self)) && TSIP_RESPONSE_CODE((self)) <= 699)
+
+/** Defines the message type (Request or Response).
+**/
+typedef enum tsip_message_type_e
+{
+ tsip_unknown,
+ tsip_request,
+ tsip_response
+}
+tsip_message_type_t;
+
+// SWIG
+typedef enum tsip_request_type_e
+{
+ tsip_NONE = 0,
+
+ tsip_ACK,
+ tsip_BYE,
+ tsip_CANCEL,
+ tsip_INVITE,
+ tsip_OPTIONS,
+ tsip_REGISTER,
+ tsip_SUBSCRIBE,
+ tsip_NOTIFY,
+ tsip_REFER,
+ tsip_INFO,
+ tsip_UPDATE,
+ tsip_MESSAGE,
+ tsip_PUBLISH,
+ tsip_PRACK
+}
+tsip_request_type_t;
+
+TSIP_END_DECLS
+
+#endif /* TSIP_MESSAGE_COMMON_H */
diff --git a/tinySIP/include/tinysip/tsip_ssession.h b/tinySIP/include/tinysip/tsip_ssession.h
new file mode 100644
index 0000000..9049a96
--- /dev/null
+++ b/tinySIP/include/tinysip/tsip_ssession.h
@@ -0,0 +1,301 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_ssession.h
+ * @brief SIP ssession.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TSIP_SSESSION_H
+#define TSIP_SSESSION_H
+
+#include "tinysip_config.h"
+
+#include "tinymedia/tmedia_common.h"
+#include "tinymedia/tmedia_session.h"
+
+#include "tsk_object.h"
+#include "tsk_list.h"
+#include "tsk_params.h"
+#include "tsk_options.h"
+
+TSIP_BEGIN_DECLS
+
+// Forward declarations
+struct tsip_message_s;
+struct tsip_action_s;
+
+typedef uint64_t tsip_ssession_id_t;
+#define TSIP_SSESSION_INVALID_ID 0
+#define TSIP_SSESSION_INVALID_HANDLE tsk_null
+
+#if defined(DEBUG) || defined(_DEBUG)
+# define TSIP_SSESSION_EXPIRES_DEFAULT 3600000 /* miliseconds. */
+#else
+# define TSIP_SSESSION_EXPIRES_DEFAULT 600000000
+#endif
+
+
+#define TSIP_SSESSION(self) ((tsip_ssession_t*)(self))
+
+typedef enum tsip_ssession_param_type_e
+{
+ sstype_null = 0,
+
+ sstype_header,
+ sstype_caps,
+ sstype_userdata,
+ sstype_to_str,
+ sstype_from_str,
+ sstype_to_obj,
+ sstype_from_obj,
+ sstype_nocontact,
+ sstype_expires,
+ sstype_silent_hangup,
+ sstype_sigcomp_id,
+ sstype_auth_ha1,
+ sstype_auth_impi,
+ sstype_parent_id,
+ sstype_ws_src,
+ sstype_media
+}
+tsip_ssession_param_type_t;
+
+#define TSIP_SSESSION_SET_PARENT_ID(PARENT_ID_SSID) sstype_parent_id, ((tsip_ssession_id_t)PARENT_ID_SSID)
+#define TSIP_SSESSION_SET_HEADER(NAME_STR, VALUE_STR) sstype_header, (const char*)NAME_STR, (const char*)VALUE_STR
+#define TSIP_SSESSION_UNSET_HEADER(NAME_STR) TSIP_SSESSION_SET_HEADER(NAME_STR, (const char*)-1)
+#define TSIP_SSESSION_SET_CAPS(NAME_STR, VALUE_STR) sstype_caps, (const char*)NAME_STR, (const char*)VALUE_STR /* RFC 3840 */
+#define TSIP_SSESSION_UNSET_CAPS(NAME_STR) TSIP_SSESSION_SET_CAPS(NAME_STR, (const char*)-1)
+#define TSIP_SSESSION_SET_USERDATA(DATA_PTR) sstype_userdata, (const void*)DATA_PTR
+#define TSIP_SSESSION_SET_TO_STR(URI_STR) sstype_to_str, (const char*)URI_STR
+#define TSIP_SSESSION_SET_FROM_STR(URI_STR) sstype_from_str, (const char*)URI_STR
+#define TSIP_SSESSION_SET_TO(URI_STR) TSIP_SSESSION_SET_TO_STR(URI_STR)
+#define TSIP_SSESSION_SET_FROM(URI_STR) TSIP_SSESSION_SET_FROM_STR(URI_STR)
+#define TSIP_SSESSION_SET_TO_OBJ(URI_OBJ) sstype_to_obj, (const tsip_uri_t*)URI_OBJ
+#define TSIP_SSESSION_SET_FROM_OBJ(URI_OBJ) sstype_from_obj, (const tsip_uri_t*)URI_OBJ
+#define TSIP_SSESSION_SET_NO_CONTACT(ENABLED_BOOL) sstype_nocontact, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_SSESSION_SET_EXPIRES(VALUE_UINT) sstype_expires, (unsigned)VALUE_UINT
+#define TSIP_SSESSION_SET_SILENT_HANGUP(ENABLED_BOOL) sstype_silent_hangup, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_SSESSION_SET_SIGCOMP_COMPARTMENT(COMPARTMENT_ID_STR) sstype_sigcomp_id, (const char*)COMPARTMENT_ID_STR
+#define TSIP_SSESSION_UNSET_SIGCOMP_COMPARTMENT() TSIP_SSESSION_SET_SIGCOMP_COMPARTMENT((const char*)-1)
+#define TSIP_SSESSION_SET_AUTH_HA1(AUTH_HA1_STR) sstype_auth_ha1, (const char*)AUTH_HA1_STR
+#define TSIP_SSESSION_SET_AUTH_IMPI(AUTH_IMPI_STR) sstype_auth_impi, (const char*)AUTH_IMPI_STR
+#define TSIP_SSESSION_SET_WEBSOCKET_SRC(SRC_HOST_STR, SRC_PORT_INT, SRC_PROTO_STR) sstype_ws_src, (const char*)SRC_HOST_STR, (int32_t)SRC_PORT_INT, (const char*)SRC_PROTO_STR
+#define TSIP_SSESSION_SET_MEDIA(...) sstype_media, ##__VA_ARGS__
+#define TSIP_SSESSION_SET_NULL() sstype_null
+
+typedef enum tsip_msession_param_type_e
+{
+ mstype_null = 0,
+
+ mstype_set_profile,
+ mstype_set_srtp_mode,
+ mstype_set_avpf_mode,
+
+ mstype_set_100rel,
+ mstype_set_rtcp,
+ mstype_set_rtcpmux,
+ mstype_set_ice,
+ mstype_set_ice_stun,
+ mstype_set_ice_turn,
+ mstype_set_stun_server,
+ mstype_set_stun_cred,
+
+ mstype_set_video_fps,
+ mstype_set_video_bw_up,
+ mstype_set_video_bw_down,
+ mstype_set_video_prefsize,
+
+ mstype_set_qos,
+ mstype_unset_qos,
+
+ mstype_set_timers,
+ mstype_unset_timers,
+
+ mstype_set_codecs,
+
+ mstype_set_bypass_encoding,
+ mstype_set_bypass_decoding,
+
+ mstype_set_rtp_ssrc,
+
+ mstype_set_msrp_cb
+}
+tsip_msession_param_type_t;
+
+#define TSIP_MSESSION_SET_SRTP_MODE(SRTP_MODE_ENUM) mstype_set_srtp_mode, (tmedia_srtp_mode_t)SRTP_MODE_ENUM
+#define TSIP_MSESSION_SET_AVPF_MODE(MEDIA_MODE_ENUM) mstype_set_avpf_mode, (tmedia_mode_t)MEDIA_MODE_ENUM
+#define TSIP_MSESSION_SET_PROFILE(PROFILE_ENUM) mstype_set_srtp_mode, (tmedia_profile_t)PROFILE_ENUM
+#define TSIP_MSESSION_SET_100rel(ENABLED_BOOL) mstype_set_100rel, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_SET_RTCP(ENABLED_BOOL) mstype_set_rtcp, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_SET_RTCPMUX(ENABLED_BOOL) mstype_set_rtcpmux, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_SET_ICE(ENABLED_BOOL) mstype_set_ice, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_SET_ICE_STUN(ENABLED_BOOL) mstype_set_ice_stun, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_SET_ICE_TURN(ENABLED_BOOL) mstype_set_ice_turn, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_SET_STUN_SERVER(HOSTNAME, PORT) mstype_set_stun_server, (const char*)HOSTNAME, (uint16_t)PORT
+#define TSIP_MSESSION_SET_STUN_CRED(USERNAME, PASSWORD) mstype_set_stun_cred, (const char*)USERNAME, (const char*)PASSWORD
+#define TSIP_MSESSION_SET_QOS(TYPE_ENUM, STRENGTH_ENUM) mstype_set_qos, (tmedia_qos_stype_t)TYPE_ENUM, (tmedia_qos_strength_t)STRENGTH_ENUM
+#define TSIP_MSESSION_UNSET_QOS() mstype_unset_qos
+#define TSIP_MSESSION_SET_VIDEO_FPS(FPS_INT) mstype_set_video_fps, (int32_t)FPS_INT
+#define TSIP_MSESSION_SET_VIDEO_BW_UP(BW_INT) mstype_set_video_bw_up, (int32_t)(BW_INT)
+#define TSIP_MSESSION_SET_VIDEO_BW_DOWN(BW_INT) mstype_set_video_bw_down, (int32_t)(BW_INT)
+#define TSIP_MSESSION_SET_VIDEO_PREFSIZE(PREFSIZE_ENUM) mstype_set_video_prefsize, (int32_t)(PREFSIZE_ENUM)
+#define TSIP_MSESSION_SET_TIMERS(TIMEOUT_UINT, REFRESHER_STR) mstype_set_timers, (unsigned)TIMEOUT_UINT, (const char*)REFRESHER_STR
+#define TSIP_MSESSION_UNSET_TIMERS() mstype_unset_timers
+#define TSIP_MSESSION_SET_CODECS(CODECS_INT) mstype_set_codecs, (signed)CODECS_INT
+#define TSIP_MSESSION_SET_BYPASS_ENCODING(ENABLED_BOOL) mstype_set_bypass_encoding, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_UNSET_BYPASS_ENCODING() TSIP_MSESSION_SET_BYPASS_ENCODING(tsk_false)
+#define TSIP_MSESSION_SET_BYPASS_DECODING(ENABLED_BOOL) mstype_set_bypass_decoding, (tsk_bool_t)ENABLED_BOOL
+#define TSIP_MSESSION_SET_RTP_SSRC(MEDIA_ENUM, SSRC_UINT) mstype_set_rtp_ssrc, (tmedia_type_t)MEDIA_ENUM, (uint32_t)SSRC_UINT
+#define TSIP_MSESSION_SET_RTP_SSRC_AUDIO(SSRC_UINT) TSIP_MSESSION_SET_RTP_SSRC(tmedia_audio, (SSRC_UINT))
+#define TSIP_MSESSION_SET_RTP_SSRC_VIDEO(SSRC_UINT) TSIP_MSESSION_SET_RTP_SSRC(tmedia_video, (SSRC_UINT))
+#define TSIP_MSESSION_UNSET_BYPASS_DECODING() TSIP_MSESSION_SET_BYPASS_DECODING(tsk_false)
+#define TSIP_MSESSION_SET_MSRP_CB(TMEDIA_SESSION_MSRP_CB_F) mstype_set_msrp_cb, (tmedia_session_msrp_cb_f)TMEDIA_SESSION_MSRP_CB_F
+
+#define TSIP_MSESSION_SET_NULL() mstype_null
+
+typedef struct tsip_ssession_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsip_ssession_id_t id;
+ tsip_ssession_id_t id_parent; //for call transfer
+ unsigned owner:1;
+
+ const struct tsip_stack_s* stack;
+ const void* userdata;
+
+ //=======
+ // SIP
+ //=======
+ tsk_params_L_t *caps;
+ tsk_params_L_t *headers;
+
+ unsigned no_contact:1;
+ struct tsip_uri_s* from;
+ struct tsip_uri_s* to;
+ int64_t expires;
+ tsk_bool_t silent_hangup;
+ char* sigcomp_id;
+ char* auth_ha1;
+ char* auth_impi;
+
+ //=======
+ // WebSocket
+ //=======
+ struct{
+ // used when the stack is running in webrtc2sip mode to store the 'origin' (a.k.a 'src')
+ struct{
+ char* host;
+ tsk_istr_t port;
+ char* proto;
+ } src;
+ } ws;
+
+ //=======
+ // Media
+ //=======
+ struct{
+ tmedia_type_t type;
+ tmedia_profile_t profile;
+ tmedia_srtp_mode_t srtp_mode;
+ tmedia_mode_t avpf_mode;
+ tmedia_codec_id_t codecs;
+ tsk_bool_t bypass_encoding;
+ tsk_bool_t bypass_decoding;
+
+ /* Video */
+ int32_t video_fps;
+ int32_t video_bw_up;
+ int32_t video_bw_down;
+ tmedia_pref_video_size_t video_pref_size;
+
+ /* RTP*/
+ struct{
+ struct{
+ uint32_t audio;
+ uint32_t video;
+ }ssrc;
+ } rtp;
+
+ /* Session timers */
+ struct{
+ char* refresher;
+ unsigned timeout;
+ } timers;
+ /* QoS */
+ struct{
+ tmedia_qos_stype_t type;
+ tmedia_qos_strength_t strength;
+ } qos;
+ /* MSRP */
+ struct{
+ tmedia_session_msrp_cb_f callback;
+ } msrp;
+ /* STUN */
+ struct{
+ char* username;
+ char* password;
+ char* hostname;
+ uint16_t port;
+ } stun;
+
+ /* Features */
+ unsigned enable_100rel:1;
+ unsigned enable_ice:1;
+ unsigned enable_icestun:1;
+ unsigned enable_iceturn:1;
+ unsigned enable_rtcp:1;
+ unsigned enable_rtcpmux:1;
+ } media;
+}
+tsip_ssession_t;
+
+/** A pointer to a SIP Session */
+typedef void tsip_ssession_handle_t;
+/** A pointer to a LTE/IMS stack */
+typedef void tsip_stack_handle_t;
+
+TINYSIP_API tsip_ssession_handle_t* tsip_ssession_create(tsip_stack_handle_t *stack, ...);
+TINYSIP_API int tsip_ssession_set(tsip_ssession_handle_t *self, ...);
+TINYSIP_API tsip_ssession_id_t tsip_ssession_get_id(const tsip_ssession_handle_t *self);
+TINYSIP_API tsip_ssession_id_t tsip_ssession_get_id_parent(const tsip_ssession_handle_t *self);
+TINYSIP_API int tsip_ssession_take_ownership(tsip_ssession_handle_t *self);
+TINYSIP_API tsk_bool_t tsip_ssession_have_ownership(const tsip_ssession_handle_t *self);
+TINYSIP_API int tsip_ssession_respond(const tsip_ssession_handle_t *self, short status, const char* phrase, const void* payload, tsk_size_t size, const struct tsip_message_s* request, ...);
+TINYSIP_API const void* tsip_ssession_get_userdata(const tsip_ssession_handle_t *self);
+TINYSIP_API tmedia_type_t tsip_ssession_get_mediatype(const tsip_ssession_handle_t *self);
+TINYSIP_API tmedia_session_mgr_t* tsip_session_get_mediamgr(const tsip_ssession_handle_t *self);
+TINYSIP_API const tsip_stack_handle_t* tsip_ssession_get_stack(const tsip_ssession_handle_t *self);
+TINYSIP_API tmedia_codec_id_t tsip_ssession_get_codecs_neg(tsip_ssession_handle_t *self);
+
+int tsip_ssession_handle(const tsip_ssession_t *self, const struct tsip_action_s* action);
+
+typedef tsk_list_t tsip_ssessions_L_t; /**< List of @ref tsip_ssession_handle_t elements. */
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_ssession_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TSIP_SSESSION_H */
+
diff --git a/tinySIP/include/tinysip/tsip_timers.h b/tinySIP/include/tinysip/tsip_timers.h
new file mode 100644
index 0000000..52fddc5
--- /dev/null
+++ b/tinySIP/include/tinysip/tsip_timers.h
@@ -0,0 +1,123 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_timers.h
+ * @brief SIP timers.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TIMERS_H
+#define TINYSIP_TIMERS_H
+
+#include "tinysip_config.h"
+
+#include "tsk_timer.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_TIMER_GET(TX) tsip_timers_get##TX()
+
+//extern const char *timerT1;
+//extern const char *timerT2;
+//extern const char *timerT4;
+//extern const char *timerA;
+//extern const char *timerB;
+//extern const char *timerC;
+//extern const char *timerD;
+//extern const char *timerE;
+//extern const char *timerF;
+//extern const char *timerG;
+//extern const char *timerH;
+//extern const char *timerI;
+//extern const char *timerJ;
+//extern const char *timerK;
+//extern const char *timerL;
+//extern const char *timerM;
+
+typedef struct tsip_timer_s
+{
+ tsk_timer_id_t id;
+ uint64_t timeout;
+}
+tsip_timer_t;
+
+typedef struct tsip_timers_s
+{
+ uint32_t T1;
+ uint32_t T2;
+ uint32_t T4;
+ uint32_t A;
+ uint32_t B;
+ uint32_t C;
+ uint32_t D;
+ uint32_t E;
+ uint32_t F;
+ uint32_t G;
+ uint32_t H;
+ uint32_t I;
+ uint32_t J;
+ uint32_t K;
+ uint32_t L;
+ uint32_t M;
+}
+tsip_timers_t;
+
+TINYSIP_API void tsip_timers_setT1(uint32_t t1);
+TINYSIP_API void tsip_timers_setT2(uint32_t t2);
+TINYSIP_API void tsip_timers_setT4(uint32_t t4);
+TINYSIP_API void tsip_timers_setA(uint32_t a);
+TINYSIP_API void tsip_timers_setB(uint32_t b);
+TINYSIP_API void tsip_timers_setC(uint32_t c);
+TINYSIP_API void tsip_timers_setD(uint32_t d);
+TINYSIP_API void tsip_timers_setE(uint32_t e);
+TINYSIP_API void tsip_timers_setF(uint32_t f);
+TINYSIP_API void tsip_timers_setG(uint32_t g);
+TINYSIP_API void tsip_timers_setH(uint32_t h);
+TINYSIP_API void tsip_timers_setI(uint32_t i);
+TINYSIP_API void tsip_timers_setJ(uint32_t j);
+TINYSIP_API void tsip_timers_setK(uint32_t k);
+TINYSIP_API void tsip_timers_setL(uint32_t l);
+TINYSIP_API void tsip_timers_setM(uint32_t m);
+
+TINYSIP_API uint32_t tsip_timers_getT1();
+TINYSIP_API uint32_t tsip_timers_getT2();
+TINYSIP_API uint32_t tsip_timers_getT4();
+TINYSIP_API uint32_t tsip_timers_getA();
+TINYSIP_API uint32_t tsip_timers_getB();
+TINYSIP_API uint32_t tsip_timers_getC();
+TINYSIP_API uint32_t tsip_timers_getD();
+TINYSIP_API uint32_t tsip_timers_getE();
+TINYSIP_API uint32_t tsip_timers_getF();
+TINYSIP_API uint32_t tsip_timers_getG();
+TINYSIP_API uint32_t tsip_timers_getH();
+TINYSIP_API uint32_t tsip_timers_getI();
+TINYSIP_API uint32_t tsip_timers_getJ();
+TINYSIP_API uint32_t tsip_timers_getK();
+TINYSIP_API uint32_t tsip_timers_getL();
+TINYSIP_API uint32_t tsip_timers_getM();
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_TIMERS_H */
+
diff --git a/tinySIP/include/tinysip/tsip_uri.h b/tinySIP/include/tinysip/tsip_uri.h
new file mode 100644
index 0000000..b0daf6b
--- /dev/null
+++ b/tinySIP/include/tinysip/tsip_uri.h
@@ -0,0 +1,95 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip_uri.h
+ * @brief SIP/SIPS/TEL URI.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_URI_H
+#define TINYSIP_URI_H
+
+#include "tinysip_config.h"
+
+#include "tsk_object.h"
+#include "tsk_params.h"
+#include "tsk_buffer.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_URI_IS_SECURE(uri) ((uri && uri->type==uri_sips) ? tsk_true : tsk_false)
+
+typedef enum tsip_uri_type_e
+{
+ uri_unknown,
+ uri_sip,
+ uri_sips,
+ uri_tel
+}
+tsip_uri_type_t;
+
+typedef enum tsip_host_type_e
+{
+ host_unknown,
+ host_hostname,
+ host_ipv4,
+ host_ipv6
+}
+tsip_host_type_t;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+///
+/// @brief SIP/SIPS/TEL URI.
+///
+////////////////////////////////////////////////////////////////////////////////////////////////////
+typedef struct tsip_uri_s
+{
+ TSK_DECLARE_OBJECT;
+
+ tsip_uri_type_t type;
+ char *scheme;
+ char *host; /**< Host name. Hostname or IPv4address or IPv6address. */
+ tsip_host_type_t host_type; /**< IPv4 or IPv6 or domain name. */
+ uint16_t port;
+ char *user_name;
+ char *password;
+ char *display_name;
+
+ tsk_params_L_t *params; /**< list of @ref tsk_param_t elements containing all parameters. */
+}
+tsip_uri_t;
+
+typedef tsk_list_t tsip_uris_L_t;
+
+TINYSIP_API tsip_uri_t* tsip_uri_create(tsip_uri_type_t type);
+TINYSIP_API int tsip_uri_serialize(const tsip_uri_t *uri, tsk_bool_t with_params, tsk_bool_t quote, tsk_buffer_t *output);
+TINYSIP_API char* tsip_uri_tostring(const tsip_uri_t *uri, tsk_bool_t with_params, tsk_bool_t quote);
+TINYSIP_API tsip_uri_t *tsip_uri_clone(const tsip_uri_t *uri, tsk_bool_t with_params, tsk_bool_t quote);
+
+TINYSIP_GEXTERN const tsk_object_def_t *tsip_uri_def_t;
+
+TSIP_END_DECLS
+
+#endif /* TINYSIP_URI_H */
+
diff --git a/tinySIP/include/tinysip_config.h b/tinySIP/include/tinysip_config.h
new file mode 100644
index 0000000..2f95cde
--- /dev/null
+++ b/tinySIP/include/tinysip_config.h
@@ -0,0 +1,96 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+#ifndef TINYSIP_CONFIG_H
+#define TINYSIP_CONFIG_H
+
+#ifdef __SYMBIAN32__
+#undef _WIN32 /* Because of WINSCW */
+#endif
+
+/* Windows (XP/Vista/7/CE and Windows Mobile) macro definition */
+#if defined(WIN32)|| defined(_WIN32) || defined(_WIN32_WCE)
+# define TSIP_UNDER_WINDOWS 1
+#elif __APPLE__
+# define TSIP_UNDER_APPLE 1
+#endif
+
+// Windows (XP/Vista/7/CE and Windows Mobile) macro definition
+#if defined(WIN32)|| defined(_WIN32) || defined(_WIN32_WCE)
+# define TSIP_UNDER_WINDOWS 1
+# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP || WINAPI_FAMILY == WINAPI_FAMILY_APP)
+# define TSIP_UNDER_WINDOWS_RT 1
+# endif
+#elif __APPLE__
+# define TSIP_UNDER_APPLE 1
+#endif
+
+#if !defined(__GNUC__) && defined(TINYSIP_EXPORTS)
+# define TINYSIP_API __declspec(dllexport)
+# define TINYSIP_GEXTERN extern __declspec(dllexport)
+#elif !defined(__GNUC__) && !defined(TINYSIP_IMPORTS_IGNORE)
+# define TINYSIP_API __declspec(dllimport)
+# define TINYSIP_GEXTERN __declspec(dllimport)
+#else
+# define TINYSIP_API
+# define TINYSIP_GEXTERN extern
+#endif
+
+
+/* Guards against C++ name mangling */
+#ifdef __cplusplus
+# define TSIP_BEGIN_DECLS extern "C" {
+# define TSIP_END_DECLS }
+#else
+# define TSIP_BEGIN_DECLS
+# define TSIP_END_DECLS
+#endif
+
+/* Disable some well-known warnings */
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_WARNINGS
+#endif
+
+/* Detecting C99 compilers */
+#if (__STDC_VERSION__ == 199901L) && !defined(__C99__)
+# define __C99__
+#endif
+
+/* Whether to use SIP Compact headers (RFC 3261 - 7.3.3 Compact Form) */
+#if !defined(TSIP_COMPACT_HEADERS)
+# define TSIP_COMPACT_HEADERS 0
+#endif
+
+#include <stdint.h>
+#ifdef __SYMBIAN32__
+#include <stdlib.h>
+#endif
+
+#if defined(__APPLE__)
+# include <TargetConditionals.h>
+#endif
+
+#if HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#endif // TINYSIP_CONFIG_H
diff --git a/tinySIP/include/tsip.h b/tinySIP/include/tsip.h
new file mode 100644
index 0000000..0a1d79b
--- /dev/null
+++ b/tinySIP/include/tsip.h
@@ -0,0 +1,692 @@
+/*
+* Copyright (C) 2010-2011 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+/**@file tsip.h
+ * @brief SIP (RFC 3261) and 3GPP IMS/LTE (TS 24.229) implementation.
+ *
+ * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
+ *
+
+ */
+#ifndef TINYSIP_TSIP_H
+#define TINYSIP_TSIP_H
+
+#include "tinysip_config.h"
+
+#include "tinysip/tsip_ssession.h"
+#include "tinysip/tsip_timers.h"
+#include "tinysip/tsip_event.h"
+#include "tinysip/transports/tsip_transport.h"
+
+#include "tinysip/tsip_uri.h"
+
+#include "tinysip/sigcomp/tsip_sigcomp.h"
+
+#include "tinynet.h"
+
+#include "tsk_runnable.h"
+
+TSIP_BEGIN_DECLS
+
+#define TSIP_IARI_GSMAIS "urn%3Aurn-7%3A3gpp-application.ims.iari.gsma-is"
+#define TSIP_IARI_QUOTED_GSMAIS "\"" TSIP_IARI_GSMAIS "\""
+#define TSIP_ICSI_MMTEL_PSVOICE "urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel"
+#define TSIP_ICSI_QUOTED_MMTEL_PSVOICE "\"" TSIP_ICSI_MMTEL_PSVOICE "\""
+
+#define TSIP_STACK(self) ((tsip_stack_t*)(self))
+
+typedef uint8_t amf_t[2];
+typedef uint8_t operator_id_t[16];
+
+// @tinyWRAP
+typedef enum tsip_stack_mode_e
+{
+ tsip_stack_mode_ua,
+ tsip_stack_mode_p2p,
+ tsip_stack_mode_webrtc2sip,
+ tsip_stack_mode_mcu
+}
+tsip_stack_mode_t;
+#define TSIP_STACK_MODE_IS_SERVER(stack) ((stack)->network.mode == tsip_stack_mode_webrtc2sip || (stack)->network.mode == tsip_stack_mode_mcu)
+#define TSIP_STACK_MODE_IS_CLIENT(stack) (!TSIP_STACK_MODE_IS_SERVER((stack)))
+
+typedef enum tsip_stack_param_type_e
+{
+ tsip_pname_null = 0,
+
+ /* === Identity === */
+ tsip_pname_display_name,
+ tsip_pname_impu,
+ tsip_pname_preferred_id,
+ tsip_pname_impi,
+ tsip_pname_password,
+
+ /* === SigComp === */
+ tsip_pname_sigcomp,
+ tsip_pname_sigcomp_add_compartment,
+ tsip_pname_sigcomp_remove_compartment,
+
+ /* === Network === */
+ tsip_pname_realm,
+ tsip_pname_local_ip,
+ tsip_pname_local_port,
+ tsip_pname_aor,
+ tsip_pname_discovery_naptr,
+ tsip_pname_discovery_dhcp,
+ tsip_pname_proxy_cscf,
+ tsip_pname_dnsserver,
+ tsip_pname_max_fds,
+ tsip_pname_mode,
+
+
+ /* === Security === */
+ tsip_pname_early_ims,
+ tsip_pname_secagree_ipsec,
+ tsip_pname_secagree_tls,
+ tsip_pname_amf,
+ tsip_pname_operator_id,
+ tsip_pname_tls_certs,
+ tsip_pname_ipsec_params,
+
+ /* === Dummy Headers === */
+ tsip_pname_header,
+
+ /* Nat Traversal */
+ tsip_pname_stun_enabled,
+ tsip_pname_stun_server,
+ tsip_pname_stun_cred,
+
+ /* === User Data === */
+ tsip_pname_userdata,
+}
+tsip_stack_param_type_t;
+
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_NULL
+* Ends the stack parameters. Mandatory and should be the last one.
+*/
+#define TSIP_STACK_SET_NULL() tsip_pname_null
+
+/* === Identity === */
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_DISPLAY_NAME
+* Sets the user's display name. Used in SIP 'From' and 'To' headers.
+* @param NAME_STR The user's display name.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_DISPLAY_NAME("john doe"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_IMPU
+* Sets the user's IMPU (IMS Public Identity).
+* @param URI_STR A valid SIP/SIPS/tel URI string.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_IMPU("sip:johndoe@open-ims.test"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_PREFERRED_IDENTITY
+* Sets the user's Preferred Identity. Used to populate the P-Preferred-Identity header.
+* @param URI_STR A valid SIP/SIPS/tel URI string.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_PREFERRED_IDENTITY("sip:johndoe@open-ims.test"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_IMPI
+* Sets the user's IMPI (IMS Private Identity).
+* @param IMPI_STR Any string.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_IMPI("johndoe@open-ims.test"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_PASSWORD
+* Sets the user's password.
+* @param PASSORD_STR Any string.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_PASSWORD("mysecret"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+#define TSIP_STACK_SET_DISPLAY_NAME(NAME_STR) tsip_pname_display_name, (const char*)NAME_STR
+#define TSIP_STACK_SET_IMPU(URI_STR) tsip_pname_impu, (const char*)URI_STR
+#define TSIP_STACK_SET_PREFERRED_IDENTITY(URI_STR) tsip_pname_preferred_id, (const char*)URI_STR
+#define TSIP_STACK_SET_IMPI(IMPI_STR) tsip_pname_impi, (const char*)IMPI_STR
+#define TSIP_STACK_SET_PASSWORD(PASSORD_STR) tsip_pname_password, (const char*)PASSORD_STR
+
+
+/* === SigComp === */
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_SIGCOMP
+* Sets the SigComp parameters. It's not mandatory to call this function in order to use SigComp.
+* It should be called to change default parameters. As these parameters will be shared by all compartments,
+* you should call this function before adding any compartment.
+* @param DMS_UINT Decompression Memory Size. Default value is 8192.
+* @param SMS_UINT State Memory Size. Default value is 8192.
+* @param CPB_UINT Cycles Per Bit. Default value is 64.
+* @param PRES_DICT_BOOL Indicates whether to enable Presence dictionary (RFC 5112) or not. Default value is @a tsk_false.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_SIGCOMP(8192, 8192, 64, tsk_true),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_SIGCOMP_NEW_COMPARTMENT
+* Add New unique compartment identifier to the stack. This compartment will be closed (not removed) when the stack is stopped.
+* A any time, you can remove this compartment by using @ref TSIP_STACK_UNSET_SIGCOMP_COMPARTMENT().
+* @param COMPARTMENT_ID_STR The id of the compartment to add. Should be unique.
+* The identifier will be used to in the sip headers (as per RFC 5049) "AS IS".<br>
+* @sa @ref TSIP_STACK_UNSET_SIGCOMP_COMPARTMENT()
+*
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_NEW_SIGCOMP_COMPARTMENT("urn:uuid:0C67446E-F1A1-11D9-94D3-000A95A0E128"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_UNSET_SIGCOMP_COMPARTMENT
+* Removes a SigComp compartment. This will close the compartment and release all its states.
+* You should only close a compartment if there is no outgoing session using it. In all cases, all compartments
+* will be closed when the stack is destroyed or stopped.
+* @param COMPARTMENT_ID_STR The id of the compartment to close.
+* @sa @ref TSIP_STACK_SET_SIGCOMP_NEW_COMPARTMENT()
+*
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_UNSET_SIGCOMP_COMPARTMENT("urn:uuid:0C67446E-F1A1-11D9-94D3-000A95A0E128"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+#define TSIP_STACK_SET_SIGCOMP(DMS_UINT, SMS_UINT, CPB_UINT, PRES_DICT_BOOL) tsip_pname_sigcomp, (unsigned)DMS_UINT, (unsigned)SMS_UINT, (unsigned)CPB_UINT, (tsk_bool_t)PRES_DICT_BOOL
+#define TSIP_STACK_SET_SIGCOMP_NEW_COMPARTMENT(COMPARTMENT_ID_STR) tsip_pname_sigcomp_add_compartment, (const char*)COMPARTMENT_ID_STR
+#define TSIP_STACK_UNSET_SIGCOMP_COMPARTMENT(COMPARTMENT_ID_STR) tsip_pname_sigcomp_remove_compartment, (const char*)COMPARTMENT_ID_STR
+
+/* === Network === */
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_REALM
+* Sets the domain name.
+* @param URI_STR A valid SIP/SIPS URI string.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_REALM("sip:open-ims.test"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_LOCAL_IP
+* Sets the user's local IP address.
+* @param IP_STR IPv4/IPv6 IP address or FQDN.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_LOCAL_IP("fe80::"),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*
+* @sa @ref TSIP_STACK_SET_LOCAL_PORT()<br>@ref TSIP_STACK_SET_AOR()
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_LOCAL_PORT
+* Sets the user's local Port to bind to.
+* @param PORT_UINT Port number. Should be between 0x0400 and 0xFFFF.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_LOCAL_PORT(5060),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*
+* @sa @ref TSIP_STACK_SET_LOCAL_IP()<br>@ref TSIP_STACK_SET_AOR()
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_AOR
+* Sets the SIP AOR to use for all outgoing requests.
+* @param IP_STR The IP address. Should be numeric IP string. e.g. 192.168.0.16.
+* Will be ignored if null or empty.
+* @param PORT_UINT Port number. Should be between 0x0400 and 0xFFFF.
+* Will be ignored if equals to zero.
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_AOR("fe80::", 1234),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*
+* @sa @ref TSIP_STACK_SET_LOCAL_IP()<br>@ref TSIP_STACK_SET_LOCAL_PORT()
+*/
+
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_DISCOVERY_NAPTR
+* Whether to use DNS NAPTR for Proxy-CSCF discovery. Default is false. However, if the Proxy-CSCF IP address
+* is missing, then this option will be enabled by default.
+* @param ENABLED_BOOL @a tsk_true (1) or @a tsk_false (0).
+* @code
+* int ret = tsip_stack_set(stack,
+* TSIP_STACK_SET_DISCOVERY_NAPTR(tsk_true),
+* TSIP_STACK_SET_NULL());
+* @endcode
+*
+* @sa @ref TSIP_STACK_SET_DISCOVERY_DHCP()
+*/
+/**@ingroup tsip_stack_group
+* @def TSIP_STACK_SET_DISCOVERY_DHCP
+* Whether to use DHCPv4/v6 for Proxy-CSCF discovery. Default is false. The IP version (v4/v6) of the DHCP protocol