emunetmon.c

来自「This is a resource based on j2me embedde」· C语言 代码 · 共 2,245 行 · 第 1/4 页

C
2,245
字号
/* * * * Copyright  1990-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. *//* * This file implements the native method of the classes that are related * to the network monitor utility. * The classes are: * com.sun.kvem.netmon.NetMonProxy; * com.sun.kvem.netmon.HttpAgent * com.sun.kvem.netmon.HttpsAgent * com.sun.kvem.io.socket.Protocol * com.sun.kvem.io.datagram.Protocol * com.sun.kvem.io.comm.Protocol * com.sun.kvem.io.ssl.Protocol * com.sun.kvem.io.j2me.sms.DatagramImpl * * See the classes javadoc for more info. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <kni.h>#include <lime.h>#include <stdlib.h>#include <stdio.h>#include <midpMalloc.h>#define BOOL_DEFINED#if 0#define DEBUG_PRINT(s) puts(s); fflush(stdout)#else#define DEBUG_PRINT(s)#endif#define FIELDOFFSET(cl, n, t) \(lookupField((cl), getNameAndTypeKey((n), (t)))->u.offset)#define NETMON_HTTP_PACKAGE "com.sun.kvem.netmon.http"#define HTTP_RECEIVER "HttpMsgReceiver"#define HTTPS_RECEIVER "HttpsMsgReceiver"#define NETMON_SOCKET_PACKAGE "com.sun.kvem.netmon.socket"#define SOCKET_RECEIVER "SocketMsgReceiver"#define NETMON_SSL_PACKAGE "com.sun.kvem.netmon.ssl"#define SSL_RECEIVER "SSLMsgReceiver"#define NETMON_DATAGRAM_PACKAGE "com.sun.kvem.netmon.datagram"#define DATAGRAM_RECEIVER "DatagramMsgReceiver"#define NETMON_COMM_PACKAGE "com.sun.kvem.netmon.comm"#define COMM_RECEIVER "CommMsgReceiver"#define NETMON_SMS_PACKAGE "com.sun.kvem.netmon.sms"#define SMS_RECEIVER "SMSMsgReceiver"#define NETMON_MMS_PACKAGE "com.sun.kvem.netmon.mms"#define MMS_RECEIVER "MMSMsgReceiver"#define NETMON_OBEX_PACKAGE "com.sun.kvem.netmon.obex"#define OBEX_RECEIVER "ObexMsgReceiver"#define NETMON_BLUETOOTH_PACKAGE "com.sun.kvem.netmon.bluetooth"#define BLUETOOTH_RECEIVER "BluetoothMsgReceiver"#define NETMON_APDU_PACKAGE "com.sun.kvem.netmon.apdu"#define APDU_RECEIVER "APDUMsgReceiver"#define NETMON_JCRMI_PACKAGE "com.sun.kvem.netmon.jcrmi"#define JCRMI_RECEIVER "JCRMIMsgReceiver"#define NETMON_SIP_PACKAGE "com.sun.kvem.netmon.sip"#define SIP_RECEIVER "SipMsgReceiver"#define LIME_PACKAGE "com.sun.kvem.midp"#define LIME_GRAPHICS_CLASS "GraphicsBridge"#define LIME_MEDIA_CLASS "MediaBridge"#define LIME_NETWORK_CLASS "NetworkBridge"#define LIME_HTTP_CLASS "NetworkBridge"#define LIME_HTTPS_CLASS "SSLNetworkBridge"#define LIME_EVENT_CLASS "EventBridge"#define LIME_COMMAND_CLASS "CommandManager"#define LIME_DEBUG_CLASS "DebugBridge"#define LIME_TEXT_CLASS "TextManager"#define LIME_WIDGET_CLASS "WidgetManager"#define LIME_API_CLASS "APIManager"#define LIME_DEVICE_CLASS "DeviceBridge"#define LIME_POPUP_CLASS  "PopupChoiceGroupManager"#define LIME_RESOURCE_CLASS  "ResourceBridge"/* * boolean isNetworkMonitorActive(); */KNIEXPORT KNI_RETURNTYPE_BOOLEANJava_javax_microedition_io_Connector_isNetworkMonitorActive() {    KNI_ReturnBoolean(isNetworkMonitorActive());}KNIEXPORT KNI_RETURNTYPE_BOOLEANJava_com_sun_kvem_netmon_NetMonProxy_isNetworkMonitorActive0() {    KNI_ReturnBoolean(isNetworkMonitorActive());}/* HTTP Agent Methods ----------------------------------------------------*//* * int newStream(String url, int direction, long groupid) */KNIEXPORT KNI_RETURNTYPE_INTJava_com_sun_kvem_netmon_HttpAgent_newStream0() {    jlong groupid;    jint direction;    jint md;    jchar* urlData;    int urlLength;    KNI_StartHandles(1);    KNI_DeclareHandle(url);    static LimeFunction *f = NULL;    KNI_GetParameterAsObject(1, url);    direction = KNI_GetParameterAsInt(2);    groupid = KNI_GetParameterAsLong(3);    DEBUG_PRINT("in HttpAgent_newStream\n");    urlLength = KNI_GetStringLength(url);    urlData = (jchar*)midpMalloc(urlLength * sizeof(jchar));    if (urlData == NULL) {        KNI_ThrowNew("java/lang/OutOfMemoryError", "");    } else {        KNI_GetStringRegion(url, 0, urlLength, urlData);        if(f == NULL) {	        /* int newStream(String url, int direction, int groupid) */	        f = NewLimeFunction(NETMON_HTTP_PACKAGE,	        HTTP_RECEIVER,	        "newStream");        }        f->call(f, &md, urlData , urlLength, direction, groupid);        midpFree(urlData);    }    KNI_EndHandles();    KNI_ReturnInt(md);}/** * void write(int md, int _byte) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_netmon_HttpAgent_write() {    int byte, md;    static LimeFunction *f = NULL;    md = KNI_GetParameterAsInt(1);    byte = KNI_GetParameterAsInt(2);    DEBUG_PRINT("in HttpAgent_write\n");    if(f == NULL) {	    /* void updateMsgOneByte(int md, int b) */	    f = NewLimeFunction(NETMON_HTTP_PACKAGE,	    HTTP_RECEIVER,	    "updateMsgOneByte");    }    f->call(f,NULL,md,byte);    KNI_ReturnVoid();}/** * void write(int md, byte[] buff, int off, int len) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_netmon_HttpAgent_writeBuff() {    int md, off, len;    KNI_StartHandles(1);    KNI_DeclareHandle(buffer);    static LimeFunction *f = NULL;    jbyte* bufferData = NULL;    int bufferLength = 0;    md = KNI_GetParameterAsInt(1);    KNI_GetParameterAsObject(2, buffer);    off = KNI_GetParameterAsInt(3);    len = KNI_GetParameterAsInt(4);    DEBUG_PRINT("in HttpAgent_writeBuff\n");    bufferLength = KNI_GetArrayLength(buffer);    bufferData = (jbyte*) midpMalloc(bufferLength * sizeof(jbyte));    if (bufferData == NULL) {        KNI_ThrowNew("java/lang/OutOfMemoryError", "");    } else {        KNI_GetRawArrayRegion(buffer, 0, bufferLength * sizeof(jbyte),                bufferData);	if(f == NULL) {		/* void updateMsgBuff(int md , byte[] buffer, int off, int len) */		f = NewLimeFunction(NETMON_HTTP_PACKAGE,		HTTP_RECEIVER,		"updateMsgBuff");	}	f->call(f, NULL, md, bufferData, bufferLength, off, len);        midpFree(bufferData);    }    KNI_EndHandles();    KNI_ReturnVoid();}/** * void close(int md) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_netmon_HttpAgent_close() {    int md = KNI_GetParameterAsInt(1);    static LimeFunction *f = NULL;    DEBUG_PRINT("in HttpAgent_close\n");    if(f == NULL) {	    f = NewLimeFunction(NETMON_HTTP_PACKAGE,	    HTTP_RECEIVER,	    "close");    }    f->call(f, NULL, md);    KNI_ReturnVoid();}/* HTTPS Agent Methods ---------------------------------------------------*//** * int newStream(String url, int direction, long groupid) */KNIEXPORT KNI_RETURNTYPE_INTJava_com_sun_kvem_netmon_HttpsAgent_newStream() {    int direction;    jlong groupid;    jchar* urlData;    int urlLength;    int md;    KNI_StartHandles(1);    KNI_DeclareHandle(url);    static LimeFunction *f = NULL;    KNI_GetParameterAsObject(1, url);    direction = KNI_GetParameterAsInt(2);    groupid = KNI_GetParameterAsLong(3);    DEBUG_PRINT("in HttpsAgent_newStream\n");    urlLength = KNI_GetStringLength(url);    urlData = (jchar*)midpMalloc(urlLength * sizeof(jchar));    if (urlData == NULL) {        KNI_ThrowNew("java/lang/OutOfMemoryError", "");    } else {        KNI_GetStringRegion(url, 0, urlLength, urlData);	if(f == NULL) {		/* int newStream( String url, int direction, long groupid) */		f = NewLimeFunction(NETMON_HTTP_PACKAGE,		HTTPS_RECEIVER,		"newStream");	}	f->call(f, &md, urlData , urlLength, direction, groupid);        midpFree(urlData);    }    KNI_EndHandles();    KNI_ReturnInt(md);}/** * void write(int md, int _byte) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_netmon_HttpsAgent_write() {    int md, byte;    static LimeFunction *f = NULL;    md = KNI_GetParameterAsInt(1);    byte = KNI_GetParameterAsInt(2);    DEBUG_PRINT("in HttpsAgent_write\n");    if(f == NULL) {	    /* void updateOneByte( int md, int b) */	    f = NewLimeFunction(NETMON_HTTP_PACKAGE,	    HTTPS_RECEIVER,	    "updateMsgOneByte");    }    f->call( f, NULL, md, byte);    KNI_ReturnVoid();}/** * void writeBuff(int md, byte[] buff, int off, int len) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_netmon_HttpsAgent_writeBuff() {    int md, off, len;    KNI_StartHandles(1);    KNI_DeclareHandle(buffer);    static LimeFunction *f = NULL;    jbyte* bufferData;    int bufferLength;    md = KNI_GetParameterAsInt(1);    KNI_GetParameterAsObject(2, buffer);    off = KNI_GetParameterAsInt(3);    len = KNI_GetParameterAsInt(4);    DEBUG_PRINT("in HttpsAgent_write\n");    bufferLength = KNI_GetArrayLength(buffer);    bufferData = (jbyte*) midpMalloc(bufferLength * sizeof(jbyte));    if (bufferData == NULL) {        KNI_ThrowNew("java/lang/OutOfMemoryError", "");    } else {        KNI_GetRawArrayRegion(buffer, 0, bufferLength * sizeof(jbyte),                bufferData);	if(f == NULL) {		/* void updateMsgBuff(int md,byte[] buff, int off, int len) */		f = NewLimeFunction(NETMON_HTTP_PACKAGE,		HTTPS_RECEIVER,		"updateMsgBuff");	}	f->call(f, NULL, md, bufferData, bufferLength, off, len);        midpFree(bufferData);    }    KNI_EndHandles();    KNI_ReturnVoid();}/** * void close(int md) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_netmon_HttpsAgent_close() {	int md;	static LimeFunction *f = NULL;        md = KNI_GetParameterAsInt(1);	DEBUG_PRINT("in HttpsAgent_close\n");	if(f == NULL) {		/* void close(int md) */		f = NewLimeFunction(NETMON_HTTP_PACKAGE,		HTTPS_RECEIVER,		"close");	}	f->call(f,NULL,md);        KNI_ReturnVoid();}/* Socket Agent Methods ---------------------------------------------------*//** * int connect0(String url, int mode, long groupid) */KNIEXPORT KNI_RETURNTYPE_INTJava_com_sun_kvem_io_j2me_socket_Protocol_connect0() {    int md;    jint mode;    jlong groupid;    jchar* urlData;    int urlLength;    KNI_StartHandles(1);    KNI_DeclareHandle(url);    static LimeFunction *f = NULL;    KNI_GetParameterAsObject(1, url);    mode = KNI_GetParameterAsInt(2);    groupid = KNI_GetParameterAsLong(3);    DEBUG_PRINT("in socket_Protocol_connect0\n");    urlLength = KNI_GetStringLength(url);    urlData = (jchar*)midpMalloc(urlLength * sizeof(jchar));    if (urlData == NULL) {        KNI_ThrowNew("java/lang/OutOfMemoryError", "");    } else {        KNI_GetStringRegion(url, 0, urlLength, urlData);        if(f == NULL) {          /* int connect(String name, int mode, long groupid) */          f = NewLimeFunction(NETMON_SOCKET_PACKAGE,		             SOCKET_RECEIVER,		             "connect");        }        f->call(f, &md, urlData, urlLength, mode, groupid);        midpFree(urlData);    }    KNI_EndHandles();    KNI_ReturnInt(md);}/** * void disconnect0(int md) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_io_j2me_socket_Protocol_disconnect0() {    int md;    static LimeFunction *f = NULL;    md = KNI_GetParameterAsInt(1);    DEBUG_PRINT("in socket_Protocol_disconnect0\n");    if(f == NULL) {        f = NewLimeFunction(NETMON_SOCKET_PACKAGE,		           SOCKET_RECEIVER,		           "disconnect");    }    f->call(f, NULL, md);    KNI_ReturnVoid();}/** * void read0(int md, byte b[], int off, int len) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_io_j2me_socket_Protocol_read0() {    int md, off, len;    jbyte* data;    int length;    KNI_StartHandles(1);    KNI_DeclareHandle(b);    md = KNI_GetParameterAsInt(1);    KNI_GetParameterAsObject(2, b);    off = KNI_GetParameterAsInt(3);    len = KNI_GetParameterAsInt(4);    DEBUG_PRINT("in socket_Protocol_read0\n");    length = KNI_GetArrayLength(b);    data = (jbyte*) midpMalloc(length * sizeof(jbyte));    if (data == NULL) {        KNI_ThrowNew("java/lang/OutOfMemoryError", "");    } else {        static LimeFunction *f = NULL;        KNI_GetRawArrayRegion(b, 0, length * sizeof(jbyte), data);        if(f == NULL) {            f = NewLimeFunction(NETMON_SOCKET_PACKAGE,		               SOCKET_RECEIVER,		               "read");        }        f->call(f,NULL, md, data, length, off, len);        midpFree(data);    }    KNI_EndHandles();    KNI_ReturnVoid();}/** * void write0(int md, byte b[], int off, int len) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_io_j2me_socket_Protocol_write0() {    int md, off, len;    jbyte* data;    int length;    KNI_StartHandles(1);    KNI_DeclareHandle(b);    md = KNI_GetParameterAsInt(1);    KNI_GetParameterAsObject(2, b);    off = KNI_GetParameterAsInt(3);    len = KNI_GetParameterAsInt(4);    DEBUG_PRINT("in socket_Protocol_write0\n");    length = KNI_GetArrayLength(b);    data = (jbyte*) midpMalloc(length * sizeof(jbyte));    if (data == NULL) {        KNI_ThrowNew("java/lang/OutOfMemoryError", "");    } else {        static LimeFunction *f = NULL;        KNI_GetRawArrayRegion(b, 0, length * sizeof(jbyte), data);        if(f == NULL) {            f = NewLimeFunction(NETMON_SOCKET_PACKAGE,		               SOCKET_RECEIVER,		               "write");        }        f->call(f, NULL, md, data, length, off, len);        midpFree(data);    }    KNI_EndHandles();    KNI_ReturnVoid();}/** * void setSocketOption(int md, byte option,  int value) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_com_sun_kvem_io_j2me_socket_Protocol_setSocketOption0() {    jint md, value;    jbyte option;    static LimeFunction *f = NULL;    md = KNI_GetParameterAsInt(1);    option = KNI_GetParameterAsByte(2);    value = KNI_GetParameterAsInt(3);    DEBUG_PRINT("in socket_Protocol_setSocketOption0\n");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?