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: package com.sun.midp.io.j2me.tcpobex;
027:
028: // jsr082 (impl) classes
029: import com.sun.kvem.jsr082.obex.ObexTransport;
030: import com.sun.kvem.jsr082.obex.ObexTransportNotifier;
031:
032: // cldc API classes
033: import javax.microedition.io.Connection;
034: import java.io.IOException;
035:
036: import com.sun.midp.security.SecurityToken;
037: import com.sun.midp.io.j2me.socket.Protocol;
038: import com.sun.midp.io.j2me.serversocket.Socket;
039: import javax.microedition.io.StreamConnection;
040:
041: /**
042: * Provides TCP OBEX stream notifier to shared obex implementation.
043: */
044: public class TCPOBEXNotifier implements ObexTransportNotifier {
045: /** TCP server socket that accepts connections to this notifier. */
046: private Socket serverSocket;
047: /** The sever socket port this notifier accepts connections on. */
048: private int port;
049:
050: /** Indicates if this notifier is closed. */
051: private boolean isClosed = false;
052:
053: /**
054: * Constracts TCPOBEXNotifier instance.
055: *
056: * @param securityToken The security token.
057: * @param port The host's port to listen on.
058: * @throws IOException if any error occures.
059: */
060: protected TCPOBEXNotifier(SecurityToken securityToken, int port)
061: throws IOException {
062: Protocol sp = new Protocol();
063:
064: if (port == 0) {
065: serverSocket = (Socket) sp.openPrim(securityToken, "//");
066: } else {
067: serverSocket = (Socket) sp.openPrim(securityToken, "//:"
068: + port);
069: }
070:
071: this .port = serverSocket.getLocalPort();
072: }
073:
074: /**
075: * Accepts new tcpobex transport connection.
076: *
077: * @return TCPOBEXConnection.
078: * @throws IOException if thrown by server socket operations or this
079: * notifier is closed
080: */
081: public ObexTransport acceptAndOpen() throws IOException {
082: StreamConnection conn = serverSocket.acceptAndOpen();
083: Object[] param = new Object[3];
084:
085: param[0] = conn.openInputStream();
086: param[1] = conn.openOutputStream();
087: param[2] = null; // close the connection now
088: conn.close();
089:
090: return createTransportConnection(param);
091: }
092:
093: /**
094: * Closes the underlaying tcp/socket notifier.
095: *
096: * @throws IOException if thrown by server socket methods
097: */
098: public synchronized void close() throws IOException {
099: if (!isClosed) {
100: isClosed = true;
101: serverSocket.close();
102: }
103: }
104:
105: /**
106: * Gets underlying connection.
107: *
108: * @return Always returns <code>null</code>.
109: */
110: public Connection getUnderlyingConnection() {
111: return null;
112: }
113:
114: /**
115: * Creates TCP OBEX transport connection.
116: *
117: * @param sockData An array of the streams.
118: * @return TCPOBEXConnection.
119: * @throws IOException
120: */
121: protected TCPOBEXConnection createTransportConnection(
122: Object[] sockData) throws IOException {
123: return new TCPOBEXConnection(sockData);
124: }
125: }
|