doubango/trunk/bindings/vs_2005/csharp/test/Form1.cs

221 lines
7.4 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace test
{
public partial class Form1 : Form
{
/*const String REALM = "ims.inexbee.com";
const String USER = "mamadou";
const String PASSWORD = "mamadou";
const String PROXY_CSCF_IP = "192.168.16.225";
const uint PROXY_CSCF_PORT = 4060;*/
const String REALM = "micromethod.com";
const String USER = "mamadou";
const String PASSWORD = "mamadou";
const String PROXY_CSCF_IP = "192.168.16.104";
const uint PROXY_CSCF_PORT = 5060;
RegistrationSession regSession = null;
PublicationSession pubSession = null;
MyCallback callback = null;
SipStack stack = null;
public delegate void PrintDebug(String text);
public PrintDebug mydel;
const String PUBLISH_PAYLOAD = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<presence xmlns:cp=\"urn:ietf:params:xml:ns:pidf:cipid\" xmlns:caps=\"urn:ietf:params:xml:ns:pidf:caps\" xmlns:rpid=\"urn:ietf:params:xml:ns:pidf:rpid\" xmlns:pdm=\"urn:ietf:params:xml:ns:pidf:data-model\" xmlns:p=\"urn:ietf:params:xml:ns:pidf-diff\" xmlns:op=\"urn:oma:xml:prs:pidf:oma-pres\" entity=\"sip:bob@ims.inexbee.com\" xmlns=\"urn:ietf:params:xml:ns:pidf\">" +
"<pdm:person id=\"RPVRYNJH\">" +
"<op:overriding-willingness>" +
"<op:basic>open</op:basic>" +
"</op:overriding-willingness>" +
"<rpid:activities>" +
"<rpid:busy />" +
"</rpid:activities>" +
"<rpid:mood>" +
"<rpid:guilty />" +
"</rpid:mood>" +
"<cp:homepage>http://www.mercuro.net</cp:homepage>" +
"<pdm:note>Come share with me RCS Experience</pdm:note>" +
"</pdm:person>" +
"<pdm:device id=\"d0001\">" +
"<status>" +
"<basic>open</basic>" +
"</status>" +
"<caps:devcaps>" +
"<caps:mobility>" +
"<caps:supported>" +
"<caps:fixed />" +
"</caps:supported>" +
"</caps:mobility>" +
"</caps:devcaps>" +
"<op:network-availability>" +
"<op:network id=\"IMS\">" +
"<op:active />" +
"</op:network>" +
"</op:network-availability>" +
"<pdm:deviceID>urn:uuid:3ca50bcb-7a67-44f1-afd0-994a55f930f4</pdm:deviceID>" +
"</pdm:device>" +
"</presence>";
public Form1()
{
InitializeComponent();
bool success;
mydel = new PrintDebug(PrintDebugMethod);
/* Create call back */
callback = new MyCallback(this);
/* Create and configure the IMS/LTE stack */
// stack = new SipStack(callback, String.Format("sip:{0}", REALM), String.Format("{0}@{1}", USER, REALM), String.Format("sip:{0}@{1}", USER, REALM));
stack = new SipStack(callback, String.Format("sip:{0}", REALM), String.Format("{0}@{1}", USER, REALM), String.Format("sip:{0}@{1}", USER, REALM));
if (!stack.isValid())
{
this.textBoxDebug.Text = "Invalid stack";
return;
}
stack.addHeader("Allow", "INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER");
stack.addHeader("Privacy", "header; id");
stack.addHeader("P-Access-Network-Info", "ADSL;utran-cell-id-3gpp=00000000");
stack.addHeader("User-Agent", "IM-client/OMA1.0 doubango/v1.0.0");
/* set password */
success = stack.setPassword(PASSWORD);
/* Sets Proxy-CSCF */
success = stack.setProxyCSCF(PROXY_CSCF_IP, PROXY_CSCF_PORT, "udp", "ipv4");
/* Starts the stack */
success = stack.start();
}
private void buttonRegister_Click(object sender, EventArgs e)
{
if (this.regSession == null)
{
this.regSession = new RegistrationSession(stack);
this.regSession.addCaps("+g.oma.sip-im");
this.regSession.addCaps("+g.3gpp.smsip");
this.regSession.addCaps("language", "\"en,fr\"");
this.regSession.setExpires(30);
}
this.regSession.Register();
}
private void buttonUnRegister_Click(object sender, EventArgs e)
{
if (this.regSession != null)
{
this.regSession.UnRegister();
}
}
private void buttonPublish_Click(object sender, EventArgs e)
{
if (this.pubSession == null)
{
this.pubSession = new PublicationSession(stack);
this.pubSession.addHeader("Content-Type", "application/pidf+xml");
this.pubSession.addHeader("Event", "presence");
this.regSession.setExpires(30);
byte[] payload = Encoding.UTF8.GetBytes(PUBLISH_PAYLOAD);
this.pubSession.Publish(payload, (uint)payload.Length);
}
}
private void buttonUnPublish_Click(object sender, EventArgs e)
{
if (this.pubSession != null)
{
this.pubSession.UnPublish();
}
}
void PrintDebugMethod(String text)
{
this.textBoxDebug.Text = text;
}
}
public class MyCallback : SipCallback
{
Form1 form;
public MyCallback(Form1 form)
: base()
{
this.form = form;
}
public override int OnRegistrationChanged(RegistrationEvent e)
{
short code = e.getCode();
tsip_register_event_type_t type = e.getType();
String text;
RegistrationSession session = e.getSession();
switch (type)
{
case tsip_register_event_type_t.tsip_i_register:
case tsip_register_event_type_t.tsip_ai_register:
case tsip_register_event_type_t.tsip_o_register:
case tsip_register_event_type_t.tsip_ao_register:
case tsip_register_event_type_t.tsip_i_unregister:
case tsip_register_event_type_t.tsip_ai_unregister:
case tsip_register_event_type_t.tsip_o_unregister:
case tsip_register_event_type_t.tsip_ao_unregister:
break;
}
text = String.Format("OnRegistrationChanged() ==> {0}:{1}", code, e.getPhrase());
if (this.form.InvokeRequired)
{
this.form.Invoke(this.form.mydel, new object[] { text });
}
return 0;
}
public override int OnPublicationChanged(PublicationEvent e)
{
short code = e.getCode();
tsip_publish_event_type_t type = e.getType();
String text;
PublicationSession session = e.getSession();
switch (type){
default:
break;
}
text = String.Format("OnPublicationChanged() ==> {0}:{1}", code, e.getPhrase());
if (this.form.InvokeRequired)
{
this.form.Invoke(this.form.mydel, new object[] { text });
}
return 0;
}
}
}