001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package examples;
028:
029: import javax.microedition.io.*;
030: import javax.microedition.midlet.MIDlet;
031: import javax.microedition.lcdui.*;
032: import javax.microedition.sip.*;
033:
034: /**
035: * Attempt various push connection registrations
036: * with static push registrations.
037: */
038: public class SipPushTest extends MIDlet implements
039: SipServerConnectionListener, CommandListener {
040:
041: /** Array of active connections. */
042: SipConnectionNotifier[] scn;
043: /** Array of URL connections. */
044: String[] connections;
045:
046: /** Terminate MIDlet button. */
047: Command exitCommand;
048: /** Message array for user communication. */
049: TextBox textBox;
050: /** Current user interface handle. */
051: Display display;
052:
053: /**
054: * Constructs a messgae array and quit button and
055: * displays message to end user.
056: * @param s the string to present to the user.
057: */
058: public void updateScreen(String s) {
059: exitCommand = new Command("Exit", Command.EXIT, 1);
060: textBox = new TextBox("SipPushTest", s, s.length(),
061: TextField.ANY | TextField.UNEDITABLE);
062: textBox.addCommand(exitCommand);
063: textBox.setCommandListener(this );
064:
065: display = Display.getDisplay(this );
066: display.setCurrent(textBox);
067: }
068:
069: /**
070: * Launches the MIDlet.
071: */
072: public void startApp() {
073:
074: // Attempt dynamic registration with port
075: try {
076: PushRegistry.registerConnection("sip:5081",
077: "examples.SipPushTest", "*");
078: } catch (Exception ex) {
079: ex.printStackTrace();
080: updateScreen(ex.getMessage());
081: }
082: try {
083: PushRegistry.unregisterConnection("sip:5081");
084: } catch (Exception ex) {
085: ex.printStackTrace();
086: updateScreen(ex.getMessage());
087: }
088:
089: // Attempt dynamic registration with port and transport
090: try {
091: PushRegistry.registerConnection("sip:5081;transport=udp",
092: "examples.SipPushTest", "*");
093: } catch (Exception ex) {
094: ex.printStackTrace();
095: updateScreen(ex.getMessage());
096: }
097: try {
098: PushRegistry.unregisterConnection("sip:5081;transport=udp");
099: } catch (Exception ex) {
100: ex.printStackTrace();
101: updateScreen(ex.getMessage());
102: }
103:
104: // Verify dynamic registration with port and transport=tcp
105: // is blocked.
106: try {
107: PushRegistry.registerConnection("sip:5081;transport=tcp",
108: "examples.SipPushTest", "*");
109: } catch (Exception ex) {
110: // Should fail - "transport=tcp" not supported
111: }
112:
113: // Verify dynamic registration for sips is blocked
114: try {
115: PushRegistry.registerConnection("sips:5081",
116: "examples.SipPushTest", "*");
117: } catch (Exception ex) {
118: // Should fail - "sips" not supported
119: }
120:
121: // Check the list of pending connections
122: connections = PushRegistry.listConnections(false);
123: if (connections != null && connections.length > 0) {
124: scn = new SipConnectionNotifier[connections.length];
125: for (int i = 0; i < connections.length; i++) {
126:
127: // Open connection for the designated push registration
128: try {
129: scn[i] = (SipConnectionNotifier) Connector
130: .open(connections[i]);
131: // Register callback method
132: scn[i].setListener(this );
133: } catch (Exception ex) {
134: // handle Exceptions
135: ex.printStackTrace();
136: updateScreen(ex.getMessage());
137: }
138: }
139: }
140: }
141:
142: /**
143: * Callback listener for inbound messages.
144: * @param scn the accepted inbound connection handle.
145: */
146: public void notifyRequest(SipConnectionNotifier scn) {
147: try {
148: SipServerConnection ssc;
149: // retrieve the request received
150: ssc = scn.acceptAndOpen();
151:
152: // Check for NOTIFY message
153: if (ssc.getMethod().equals("NOTIFY")) {
154: updateScreen(ssc.getMethod());
155: } else {
156: updateScreen(ssc.getMethod());
157: }
158: } catch (Exception ex) {
159: // handle Exceptions
160: ex.printStackTrace();
161: updateScreen(ex.getMessage());
162: }
163: }
164:
165: /** Pauses the MIDlet. */
166: public void pauseApp() {
167: }
168:
169: /**
170: * Destroys the MIDlet and cleans up all opened
171: * resources.
172: * @param unconditional flag indicating that
173: * the MIDlet will be destroyed
174: */
175: public void destroyApp(boolean unconditional) {
176: for (int i = 0; i < connections.length; i++) {
177: if (scn[i] != null) {
178: try {
179: scn[i].close();
180: } catch (Exception ex) {
181: }
182: }
183: }
184: }
185:
186: /**
187: * Callback for user interface interactions.
188: * @param command the user interface element
189: * @param screen the context for the selected
190: * user interface element.
191: */
192: public void commandAction(Command command, Displayable screen) {
193: if (command == exitCommand) {
194: destroyApp(false);
195: notifyDestroyed();
196: }
197: }
198: }
|