001: /*
002: * Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights
003: * Reserved. Use is subject to license terms.
004: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
005: *
006: * This program is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU General Public License version
008: * 2 only, as published by the Free Software Foundation.
009: *
010: * This program is distributed in the hope that it will be useful, but
011: * WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * General Public License version 2 for more details (a copy is
014: * included at /legal/license.txt).
015: *
016: * You should have received a copy of the GNU General Public License
017: * version 2 along with this work; if not, write to the Free Software
018: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
019: * 02110-1301 USA
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
022: * Clara, CA 95054 or visit www.sun.com if you need additional
023: * information or have any questions.
024: */
025:
026: package gov.nist.core;
027:
028: import com.sun.midp.io.j2me.push.ProtocolPush;
029: import com.sun.midp.io.HttpUrl;
030: import com.sun.midp.midlet.MIDletSuite;
031: import java.io.IOException;
032: import java.io.InterruptedIOException;
033: import javax.microedition.io.ConnectionNotFoundException;
034: import com.sun.midp.security.Permissions;
035: import gov.nist.siplite.SIPConstants;
036: import gov.nist.siplite.address.SipURI;
037: import gov.nist.siplite.parser.URLParser;
038: import gov.nist.core.ParseException;
039: import gov.nist.core.Utils;
040:
041: /**
042: * Implementation of push behaviour.
043: */
044: public class ProtocolPushImpl extends ProtocolPush {
045:
046: /** Instance */
047: private static ProtocolPushImpl pushInstance;
048:
049: /**
050: * Get instance of this class.
051: * @return class instance
052: */
053: protected ProtocolPush getInstance() {
054: if (pushInstance == null) {
055: pushInstance = new ProtocolPushImpl();
056: }
057: return (ProtocolPush) pushInstance;
058: }
059:
060: /**
061: * Called when registration is checked.
062: * @param connection generic connection <em>protocol</em>, <em>host</em>
063: * and <em>port number</em>
064: * (optional parameters may be included
065: * separated with semi-colons (;))
066: * @param midlet class name of the <code>MIDlet</code> to be launched,
067: * when new external data is available
068: * @param filter a connection URL string indicating which senders
069: * are allowed to cause the MIDlet to be launched
070: * @exception IllegalArgumentException if the connection string is not
071: * valid
072: * @exception ClassNotFoundException if the <code>MIDlet</code> class
073: * name can not be found in the current
074: * <code>MIDlet</code> suite
075: */
076: public void checkRegistration(String connection, String midlet,
077: String filter) {
078: }
079:
080: /**
081: * Called when registration is established.
082: * @param midletSuite MIDlet suite for the suite registering,
083: * the suite only has to implement isRegistered,
084: * checkForPermission, and getID.
085: * @param connection generic connection <em>protocol</em>, <em>host</em>
086: * and <em>port number</em>
087: * (optional parameters may be included
088: * separated with semi-colons (;))
089: * @param midlet class name of the <code>MIDlet</code> to be launched,
090: * when new external data is available
091: * @param filter a connection URL string indicating which senders
092: * are allowed to cause the MIDlet to be launched
093: * @exception IllegalArgumentException if the connection string is not
094: * valid
095: * @exception IOException if the connection is already
096: * registered or if there are insufficient resources
097: * to handle the registration request
098: * @exception ClassNotFoundException if the <code>MIDlet</code> class
099: * name can not be found in the current
100: * <code>MIDlet</code> suite
101: */
102: public void registerConnection(MIDletSuite midletSuite,
103: String connection, String midlet, String filter)
104: throws IllegalArgumentException, IOException,
105: ClassNotFoundException {
106:
107: checkIsNotHost(connection, false);
108:
109: if (connection.startsWith(SIPConstants.SCHEME_SIP.toLowerCase()
110: + ":")) {
111: try {
112: Class.forName("com.sun.midp.io.j2me.sip.Protocol");
113: } catch (ClassNotFoundException e) {
114: throw new ConnectionNotFoundException(
115: "Connection not supported");
116: }
117:
118: /*
119: * Check the suite permission for the connection
120: * and close the connection immediately.
121: */
122: try {
123: midletSuite.checkForPermission(Permissions.SIP,
124: connection);
125: } catch (InterruptedException ie) {
126: throw new InterruptedIOException(
127: "Interrupted while trying to ask the user permission");
128: }
129:
130: /*
131: * Verify the connection string.
132: */
133: URLParser parser = new URLParser(connection);
134: SipURI inputURI = null;
135: try {
136: inputURI = (SipURI) parser.parse();
137: } catch (ParseException exc) {
138: throw new IllegalArgumentException(exc.getMessage());
139: }
140: } else if (connection.startsWith(SIPConstants.SCHEME_SIPS
141: .toLowerCase()
142: + ":")) {
143: try {
144: Class.forName("com.sun.midp.io.j2me.sips.Protocol");
145: } catch (ClassNotFoundException e) {
146: throw new ConnectionNotFoundException(
147: "Connection not supported");
148: }
149:
150: /*
151: * Check the suite permission for the connection
152: * and close the connection immediately.
153: */
154: try {
155: midletSuite.checkForPermission(Permissions.SIPS,
156: connection);
157: } catch (InterruptedException ie) {
158: throw new InterruptedIOException(
159: "Interrupted while trying to ask the user permission");
160: }
161:
162: /*
163: * IMPL_NOTE: Currently SIPS push connections are not supported.
164: * Throwing an exception here prevents the sips connection
165: * URL from being registered.
166: */
167: throw new ConnectionNotFoundException(
168: "Connection not supported");
169: }
170: }
171: }
|