pcsl_ip.c

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

C
670
字号
    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_socket_getremoteaddr(	void *handle,	char *pAddress){    SOCKET s = (SOCKET)handle;    int status;    struct sockaddr_in sa;    int saLen = sizeof (sa);    sa.sin_family = AF_INET;    status = getpeername(s, (struct sockaddr*)&sa, &saLen);    if (SOCKET_ERROR == status) {        return PCSL_NET_IOERROR;    }    /*     * The string returned from inet_ntoa is only valid until the next     * winsock API call. The string should not be freed.     */    strcpy(pAddress, inet_ntoa(sa.sin_addr));    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getlocalport(	void *handle,	int *pPortNumber){    SOCKET s = (SOCKET)handle;    int status;    struct sockaddr_in sa;    int saLen = sizeof (sa);    sa.sin_family = AF_INET;    status = getsockname(s, (struct sockaddr*)&sa, &saLen);    if (SOCKET_ERROR == status) {        return PCSL_NET_IOERROR;    }    *pPortNumber = ntohs(sa.sin_port);    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getremoteport(	void *handle,	int *pPortNumber){    SOCKET s = (SOCKET)handle;    int status;    struct sockaddr_in sa;    int saLen = sizeof (sa);    sa.sin_family = AF_INET;    status = getpeername(s, (struct sockaddr*)&sa, &saLen);    if (SOCKET_ERROR == status) {        return PCSL_NET_IOERROR;    }    *pPortNumber = ntohs(sa.sin_port);    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_init(void) {	return pcsl_network_init_start(NULL);}/** * See pcsl_network.h for definition. */int pcsl_network_init_start(PCSL_NET_CALLBACK pcsl_network_callback) {    static int netinit = 0;    static WSADATA wsaData;    (void)pcsl_network_callback;    if (!netinit) {        lastError = 0;        rootAddrContext.asyncHandle = 0;        rootAddrContext.next = NULL;        if (0 != WSAStartup(0x0101, &wsaData )) {            return PCSL_NET_IOERROR;        }        netinit = 1;    }    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_init_finish(void) {	return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_finalize_start(PCSL_NET_CALLBACK pcsl_network_callback) {    (void)pcsl_network_callback;    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_finalize_finish(void) {    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_error(	void *handle){    (void)handle;    return lastError;}/** * See pcsl_network.h for definition. */int pcsl_network_getLocalHostName(    char *pLocalHost){    if (SOCKET_ERROR == gethostname(pLocalHost, MAX_HOST_LENGTH)) {        return PCSL_NET_IOERROR;    }    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getLocalIPAddressAsString(	char *pLocalIPAddress){    static char hostname[MAX_HOST_LENGTH];    struct hostent *pHost;    struct in_addr* pAddr;    if (SOCKET_ERROR == gethostname(hostname, sizeof (hostname))) {        lastError = WSAGetLastError();        return PCSL_NET_IOERROR;    }    pHost = gethostbyname(hostname);    lastError = WSAGetLastError();    if (NULL == pHost) {        return PCSL_NET_IOERROR;    }    pAddr = (struct in_addr*)(pHost->h_addr);    strcpy(pLocalIPAddress, inet_ntoa(*pAddr));    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getHostByAddr_start(int ipn, char* host, void **pHandle,        void **pContext) {    int h_len;    unsigned long addr = (unsigned long)ipn;    struct hostent *hp;    (void)pContext;    hp = gethostbyaddr((char *)&addr, sizeof (addr), AF_INET);    lastError = WSAGetLastError();    if (hp == NULL) {        /* No DNS name for this address; convert it to a dotted-quad */        struct in_addr ipAddress;        ipAddress.s_addr = ipn;        strcpy(host, inet_ntoa(ipAddress));    } else {        h_len = strlen(hp->h_name);        if (h_len > MAX_HOST_LENGTH - 1) {            h_len = MAX_HOST_LENGTH - 1;        }        (void)memmove(host, hp->h_name, h_len);        host[h_len] = 0;    }    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getHostByAddr_finish(int ipn, char* host, void **pHandle,        void *context) {    (void)ipn;    (void)host;    (void)pHandle;    (void)context;    return PCSL_NET_INVALID;}/** * See pcsl_network.h for definition. */int pcsl_network_addrToString(unsigned char *ipBytes,        unsigned short** pResult, int* pResultLen) {    struct in_addr addr;    char temp[80];    int tempLen;    int i;        memcpy(&addr.s_addr, ipBytes, sizeof(addr.s_addr));    strcpy(temp, inet_ntoa(addr));    tempLen = strlen(temp);    *pResult = (unsigned short*)pcsl_mem_malloc(tempLen *                                               sizeof (unsigned short));    if (NULL == *pResult) {        return PCSL_NET_IOERROR;    }    for (i = 0; i < tempLen; i++) {        (*pResult)[i] = temp[i];    }    *pResultLen = tempLen;    return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */void pcsl_add_network_notifier(    void *handle,    int event) {    long lEvent;    switch (event) {    case PCSL_NET_CHECK_ACCEPT:        lEvent = FD_ACCEPT;        break;    case PCSL_NET_CHECK_READ:        lEvent = FD_READ;        break;    case PCSL_NET_CHECK_WRITE:        lEvent = FD_WRITE;        break;    case PCSL_NET_CHECK_EXCEPTION:    default:        /* need revisit */        return;    }    WSAAsyncSelect((SOCKET)handle, win32app_get_window_handle(),                   WM_NETWORK, lEvent);}/** * See pcsl_network.h for definition. */void pcsl_remove_network_notifier(    void *handle,    int event) {    switch (event) {    case PCSL_NET_CHECK_ACCEPT:        break;    case PCSL_NET_CHECK_READ:        break;    case PCSL_NET_CHECK_WRITE:        break;    case PCSL_NET_CHECK_EXCEPTION:    default:        /* need revisit */        return;    }    WSAAsyncSelect((SOCKET)handle, win32app_get_window_handle(),                   0, 0);}/** * See pcsl_network.h for definition. */unsigned int pcsl_network_htonl(    unsigned int value) {    return htonl(value);}/** * See pcsl_network.h for definition. */unsigned int pcsl_network_ntohl(    unsigned int value) {    return ntohl(value);}    /** * See pcsl_network.h for definition. */unsigned short pcsl_network_htons(    unsigned short value) {    return htons(value);}/** * See pcsl_network.h for definition. */unsigned short pcsl_network_ntohs(    unsigned short value) {    return ntohs(value);}

⌨️ 快捷键说明

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