// -*- cqa -*- | |
/* System Description | |
* Defines input/output ports, | |
* and valid messages per port. | |
*/ | |
system | |
{ | |
Inbound userIn : UserInput; | |
Inbound netIn : SIPResp, SIPReq; | |
Outbound netOut : SIPResp, SIPReq; | |
Outbound userOut : TimeOutIndication; | |
} | |
/* ==================================================== | |
* Message Definitions | |
*/ | |
record TimeOutIndication { } | |
record UserInput | |
{ | |
public String input1; | |
public String input2; | |
} | |
record SIPResp | |
{ | |
public int status; | |
public String cseq; | |
} | |
record SIPReq | |
{ | |
public String op; | |
public String param; | |
} | |
/* ==================================================== | |
* SIPClient | |
*/ | |
class SIPClient extends StateMachine { | |
const float T1 = 0.5; // For UDP transport | |
public float timeoutA = T1; // 17.1.1.2 | |
public float timeoutB = 16 * T1; // 17.1.1.2 | |
public float timeoutE = T1; // 17.1.2.2 | |
public float timeoutF = 16 * T1; // 17.1.2.2 | |
/* ----------------------------------------- | |
* SIP addresses | |
* src = caller, dst = callee | |
*/ | |
public String src = "sip:127.0.0.1"; | |
public String dst = "sip:127.0.0.1:5061"; | |
/* ----------------------------------------- | |
* Methods to send SIP messages to network. | |
*/ | |
public void Invite() { | |
SIPReq r; | |
r.op = "INVITE"; | |
r.param = dst; | |
netOut.send(r, 1.0); | |
} | |
protected void Cancel() { | |
SIPReq r; | |
r.op = "CANCEL"; | |
r.param = dst; | |
netOut.send(r, 1.0); | |
} | |
protected void Ack() { | |
SIPReq r; | |
r.op = "ACK"; | |
r.param = dst; | |
netOut.send(r, 1.0); | |
} | |
protected void Bye() { | |
SIPReq r; | |
r.op = "BYE"; | |
r.param = dst; | |
netOut.send(r, 1.0); | |
} | |
protected void SendOK(String cseq) { | |
SIPResp r; | |
r.status = 200; | |
r.cseq = cseq; | |
netOut.send(r, 1.0); | |
} | |
/* ----------------------------------------- | |
* Methods to provide indications to the | |
* user interface. | |
*/ | |
private void TimeOut() | |
{ | |
// Indicate timeout | |
TimeOutIndication timeout; | |
userOut.send(timeout); | |
} | |
} | |
/* ==================================================== | |
* main() - Starting Point | |
*/ | |
void main() | |
{ | |
var a = new SIPClient(); | |
a.start(); | |
} |