Author: sayer
Date: 2009-12-05 01:47:36 +0100 (Sat, 05 Dec 2009)
New Revision: 1623
Modified:
trunk/apps/dsm/DSMCall.cpp
trunk/apps/dsm/DSMCall.h
trunk/apps/dsm/DSMCoreModule.cpp
trunk/apps/dsm/DSMCoreModule.h
trunk/apps/dsm/DSMSession.h
trunk/apps/dsm/doc/dsm_syntax.txt
Log:
allows setting headers on outgoing B2B- B leg.
B2B.clearHeaders()
clear the headers used for outgoing INVITE on B leg
B2B.addHeader(string header)
add a header for outgoing INVITE on B leg
B2B.setHeaders(string headers [, replace_crlf=true|false])
set headers for outgoing INVITE on B leg
replace_crlf=true for replacing \r\n with CRLF
e.g.
B2B.setHeaders("P-One: value\r\nP-Two: anothervalue", true)
Modified: trunk/apps/dsm/DSMCall.cpp
===================================================================
--- trunk/apps/dsm/DSMCall.cpp 2009-12-04 18:29:51 UTC (rev 1622)
+++ trunk/apps/dsm/DSMCall.cpp 2009-12-05 00:47:36 UTC (rev 1623)
@@ -440,3 +440,38 @@
req.method.c_str(), req.cseq);
recvd_req.insert(std::make_pair(req.cseq, req));
}
+
+void DSMCall::B2BsetHeaders(const string& hdr, bool replaceCRLF) {
+ if (!replaceCRLF) {
+ invite_req.hdrs = hdr;
+ } else {
+ string hdr_crlf = hdr;
+ DBG("hdr_crlf is '%s'\n", hdr_crlf.c_str());
+
+ while (true) {
+ size_t p = hdr_crlf.find("\\r\\n");
+ if (p==string::npos)
+ break;
+ hdr_crlf.replace(p, 4, "\r\n");
+ }
+ DBG("-> hdr_crlf is '%s'\n", hdr_crlf.c_str());
+ invite_req.hdrs += hdr_crlf;
+ }
+ // add \r\n if not in header
+ if (invite_req.hdrs.length()>2 &&
+ invite_req.hdrs.substr(invite_req.hdrs.length()-2) != "\r\n")
+ invite_req.hdrs+="\r\n";
+}
+
+void DSMCall::B2BaddHeader(const string& hdr) {
+ invite_req.hdrs +=hdr;
+ // add \r\n if not in header
+ if (invite_req.hdrs.length()>2 &&
+ invite_req.hdrs.substr(invite_req.hdrs.length()-2) != "\r\n")
+ invite_req.hdrs+="\r\n";
+}
+
+void DSMCall::B2BclearHeaders() {
+ invite_req.hdrs.clear();
+}
+
Modified: trunk/apps/dsm/DSMCall.h
===================================================================
--- trunk/apps/dsm/DSMCall.h 2009-12-04 18:29:51 UTC (rev 1622)
+++ trunk/apps/dsm/DSMCall.h 2009-12-05 00:47:36 UTC (rev 1623)
@@ -117,6 +117,9 @@
bool relayed_invite = false);
void B2BaddReceivedRequest(const AmSipRequest& req);
+ void B2BsetHeaders(const string& hdr, bool replaceCRLF);
+ void B2BclearHeaders();
+ void B2BaddHeader(const string& hdr);
};
#endif
Modified: trunk/apps/dsm/DSMCoreModule.cpp
===================================================================
--- trunk/apps/dsm/DSMCoreModule.cpp 2009-12-04 18:29:51 UTC (rev 1622)
+++ trunk/apps/dsm/DSMCoreModule.cpp 2009-12-05 00:47:36 UTC (rev 1623)
@@ -99,6 +99,9 @@
DEF_CMD("B2B.connectCallee", SCB2BConnectCalleeAction);
DEF_CMD("B2B.terminateOtherLeg", SCB2BTerminateOtherLegAction);
DEF_CMD("B2B.sendReinvite", SCB2BReinviteAction);
+ DEF_CMD("B2B.addHeader", SCB2BAddHeaderAction);
+ DEF_CMD("B2B.clearHeaders", SCB2BClearHeadersAction);
+ DEF_CMD("B2B.setHeaders", SCB2BSetHeadersAction);
return NULL;
}
@@ -828,3 +831,26 @@
bool updateSDP = par1=="true";
sess->sendReinvite(updateSDP, par2);
} EXEC_ACTION_END;
+
+EXEC_ACTION_START(SCB2BAddHeaderAction) {
+ string val = resolveVars(arg, sess, sc_sess, event_params);
+ DBG("adding B2B header '%s'\n", val.c_str());
+ sc_sess->B2BaddHeader(val);
+} EXEC_ACTION_END;
+
+CONST_ACTION_2P(SCB2BSetHeadersAction,',', true);
+EXEC_ACTION_START(SCB2BSetHeadersAction) {
+ string val = resolveVars(par1, sess, sc_sess, event_params);
+ string repl = resolveVars(par2, sess, sc_sess, event_params);
+ bool replace_crlf = false;
+ if (repl == "true")
+ replace_crlf = true;
+ DBG("setting B2B headers to '%s' (%sreplacing CRLF)\n",
+ val.c_str(), replace_crlf?"":"not ");
+ sc_sess->B2BsetHeaders(val, replace_crlf);
+} EXEC_ACTION_END;
+
+EXEC_ACTION_START(SCB2BClearHeadersAction) {
+ DBG("clearing B2B headers\n");
+ sc_sess->B2BclearHeaders();
+} EXEC_ACTION_END;
Modified: trunk/apps/dsm/DSMCoreModule.h
===================================================================
--- trunk/apps/dsm/DSMCoreModule.h 2009-12-04 18:29:51 UTC (rev 1622)
+++ trunk/apps/dsm/DSMCoreModule.h 2009-12-05 00:47:36 UTC (rev 1623)
@@ -93,6 +93,10 @@
DEF_ACTION_1P(SCB2BTerminateOtherLegAction);
DEF_ACTION_2P(SCB2BReinviteAction);
+DEF_ACTION_1P(SCB2BAddHeaderAction);
+DEF_ACTION_1P(SCB2BClearHeadersAction);
+DEF_ACTION_2P(SCB2BSetHeadersAction);
+
class SCDIAction
: public DSMAction {
vector<string> params;
Modified: trunk/apps/dsm/DSMSession.h
===================================================================
--- trunk/apps/dsm/DSMSession.h 2009-12-04 18:29:51 UTC (rev 1622)
+++ trunk/apps/dsm/DSMSession.h 2009-12-05 00:47:36 UTC (rev 1623)
@@ -98,9 +98,18 @@
bool relayed_invite = false) = 0;
virtual void B2BterminateOtherLeg() = 0;
- /** insert reqeust in list of received ones */
+ /** insert request in list of received ones */
virtual void B2BaddReceivedRequest(const AmSipRequest& req) = 0;
+ /** set headers of outgoing INVITE */
+ virtual void B2BsetHeaders(const string& hdr, bool replaceCRLF) = 0;
+
+ /** set headers of outgoing INVITE */
+ virtual void B2BclearHeaders() = 0;
+
+ /** add a header to the headers of outgoing INVITE */
+ virtual void B2BaddHeader(const string& hdr) = 0;
+
/** transfer ownership of object to this session instance */
virtual void transferOwnership(DSMDisposable* d) = 0;
Modified: trunk/apps/dsm/doc/dsm_syntax.txt
===================================================================
--- trunk/apps/dsm/doc/dsm_syntax.txt 2009-12-04 18:29:51 UTC (rev 1622)
+++ trunk/apps/dsm/doc/dsm_syntax.txt 2009-12-05 00:47:36 UTC (rev 1623)
@@ -97,6 +97,18 @@
generate_sdp can be 'true' or 'false'
(B2B.sendReinvite(true) recommended)
+ B2B.clearHeaders()
+ clear the headers used for outgoing INVITE on B leg
+
+ B2B.addHeader(string header)
+ add a header for outgoing INVITE on B leg
+
+ B2B.setHeaders(string headers [, replace_crlf=true|false])
+ set headers for outgoing INVITE on B leg
+ replace_crlf=true for replacing \r\n with CRLF
+ e.g.
+ B2B.setHeaders("P-One: value\r\nP-Two: anothervalue", true)
+
setPrompts(name)
if more than one prompt sets are loaded
_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev