Exemple #1
0
int32 CTCPRequestPacket::SendToSocket(uint8* data, uint32 length)
{
    int32 iResult;

    WBUFW(data,(0x00)) = length;          // packet size
    WBUFL(data,(0x04)) = 0x46465849;      // "XIFF"

    md5((uint8*)(key), blowfish.hash, 24);

	blowfish_init((int8*)blowfish.hash,16, blowfish.P, blowfish.S[0]);

	md5(data+8, data+length-0x18+0x04, length-0x18-0x04);

	uint8 tmp = (length-12)/4;
	tmp -= tmp%2;

	for(uint8 i = 0; i < tmp; i += 2) 
    {
		blowfish_encipher((uint32*)data+i+2, (uint32*)data+i+3, blowfish.P, blowfish.S[0]);
	}

	memcpy(&data[length]-0x04, key+16, 4);

    iResult = send(*m_socket, (const int8*)data, length, 0);
    if (iResult == SOCKET_ERROR) 
    {
#ifdef WIN32
        ShowError("send failed with error: %d\n", WSAGetLastError());
#else
        ShowError("send failed with error: %d\n", errno);
#endif
        return 0;
    }
    return ReceiveFromSocket();
}
Exemple #2
0
void Java_com_apress_echo_EchoClientActivity_nativeStartTcpClient(
		JNIEnv* env,
		jobject obj,
		jstring ip,
		jint port,
		jstring message)
{
	// Construct a new TCP socket.
	int clientSocket = NewTcpSocket(env, obj);
	if (NULL == env->ExceptionOccurred())
	{
		// Get IP address as C string
		const char* ipAddress = env->GetStringUTFChars(ip, NULL);
		if (NULL == ipAddress)
			goto exit;

		// Connect to IP address and port
		ConnectToAddress(env, obj, clientSocket, ipAddress,
				(unsigned short) port);

		// Release the IP address
		env->ReleaseStringUTFChars(ip, ipAddress);

		// If connection was successful
		if (NULL != env->ExceptionOccurred())
			goto exit;

		// Get message as C string
		const char* messageText = env->GetStringUTFChars(message, NULL);
		if (NULL == messageText)
			goto exit;

		// Get the message size
		jsize messageSize = env->GetStringUTFLength(message);

		// Send message to socket
		SendToSocket(env, obj, clientSocket, messageText, messageSize);

		// Release the message text
		env->ReleaseStringUTFChars(message, messageText);

		// If send was not successful
		if (NULL != env->ExceptionOccurred())
			goto exit;

		char buffer[MAX_BUFFER_SIZE];

		// Receive from the socket
		ReceiveFromSocket(env, obj, clientSocket, buffer, MAX_BUFFER_SIZE);
	}

exit:
	if (clientSocket > 0)
	{
		close(clientSocket);
	}
}
Exemple #3
0
JNIEXPORT void JNICALL Java_com_eric_ndkapp_ServerActivity_nativeSendServer
  (JNIEnv * env, jobject obj, jstring ip, jint port, jstring message)
{
	// Construct a new TCP socket.
	if (serverSocket == 0)
	{
		LogMessage(env, obj, "Server is not running.");
		return;
	}
	if (clientSocket == 0)
	{
		LogMessage(env, obj, "Client is not running.");
		return;
	}

	if (env->ExceptionOccurred() == NULL)
	{
		// Get IP address as C string
		const char* ipAddress = env->GetStringUTFChars(ip, NULL);

		if (NULL == ipAddress)
			goto exit;

		// Release the IP address
		env->ReleaseStringUTFChars(ip, ipAddress);

		// If connection was successful
		if (NULL != env->ExceptionOccurred())
			goto exit;

		// Get message as C string
		const char* messageText = env->GetStringUTFChars(message, NULL);
		if (NULL == messageText)
			goto exit;

		// Get the message size
		jsize messageSize = env->GetStringUTFLength(message);

		// Send message to socket
		SendToSocket(env, obj, clientSocket, messageText, messageSize);

		// Release the message text
		env->ReleaseStringUTFChars(message, messageText);

		// If send was not successful
		if (NULL != env->ExceptionOccurred())
			goto exit;

			char buffer[MAX_BUFFER_SIZE];
			// Receive from the socket
	    while (ReceiveFromSocket(env, obj, clientSocket, buffer, MAX_BUFFER_SIZE) > 0)
	    {
	    }
	}
exit:
	return;
}
Exemple #4
0
void ReceiveFromComPort(void)
{
    if (ReceiveFromSocket(serialSock) && !activeSock) {
        activeSock = serialSock;
        if (udpSock) {
            UDBSocket_close(udpSock);
            udpSock = NULL;
        }
        LoggingFile.mLogFile << "Using serial port.  Closed udp port." << endl;
        printf("Using serial port.  Closed udp port.\n");
    }
    if (ReceiveFromSocket(udpSock) && !activeSock) {
        activeSock = udpSock;
        if (serialSock) {
            UDBSocket_close(serialSock);
            serialSock = NULL;
        }
        LoggingFile.mLogFile << "Using udp port.  Closed serial port." << endl;
        printf("Using udp port.  Closed serial port.\n");
    }
}
Exemple #5
0
void Java_com_apress_echo_LocalEchoActivity_nativeStartLocalServer(
		JNIEnv* env,
		jobject obj,
		jstring name)
{
	// Construct a new local UNIX socket.
	int serverSocket = NewLocalSocket(env, obj);
	if (NULL == env->ExceptionOccurred())
	{
		// Get name as C string
		const char* nameText = env->GetStringUTFChars(name, NULL);
		if (NULL == nameText)
			goto exit;

		// Bind socket to a port number
		BindLocalSocketToName(env, obj, serverSocket, nameText);

		// Release the name text
		env->ReleaseStringUTFChars(name, nameText);

		// If bind is failed
		if (NULL != env->ExceptionOccurred())
			goto exit;

		// Listen on socket with a backlog of 4 pending connections
		ListenOnSocket(env, obj, serverSocket, 4);
		if (NULL != env->ExceptionOccurred())
			goto exit;

		// Accept a client connection on socket
		int clientSocket = AcceptOnLocalSocket(env, obj, serverSocket);
		if (NULL != env->ExceptionOccurred())
			goto exit;

		char buffer[MAX_BUFFER_SIZE];
		ssize_t recvSize;
		ssize_t sentSize;

		// Receive and send back the data
		while (1)
		{
			// Receive from the socket
			recvSize = ReceiveFromSocket(env, obj, clientSocket,
					buffer, MAX_BUFFER_SIZE);

			if ((0 == recvSize) || (NULL != env->ExceptionOccurred()))
				break;

			// Send to the socket
			sentSize = SendToSocket(env, obj, clientSocket,
					buffer, (size_t) recvSize);

			if ((0 == sentSize) || (NULL != env->ExceptionOccurred()))
				break;
		}

		// Close the client socket
		close(clientSocket);
	}

exit:
	if (serverSocket > 0)
	{
		close(serverSocket);
	}
}
Exemple #6
0
void Java_com_apress_echo_EchoServerActivity_nativeStartTcpServer(
		JNIEnv* env,
		jobject obj,
		jint port)
{
	// Construct a new TCP socket.
	int serverSocket = NewTcpSocket(env, obj);
	if (NULL == env->ExceptionOccurred())
	{
		// Bind socket to a port number
		BindSocketToPort(env, obj, serverSocket, (unsigned short) port);
		if (NULL != env->ExceptionOccurred())
			goto exit;

		// If random port number is requested
		if (0 == port)
		{
			// Get the port number socket is currently binded
			GetSocketPort(env, obj, serverSocket);
			if (NULL != env->ExceptionOccurred())
				goto exit;
		}

		// Listen on socket with a backlog of 4 pending connections
		ListenOnSocket(env, obj, serverSocket, 4);
		if (NULL != env->ExceptionOccurred())
			goto exit;

		// Accept a client connection on socket
		int clientSocket = AcceptOnSocket(env, obj, serverSocket);
		if (NULL != env->ExceptionOccurred())
			goto exit;

		char buffer[MAX_BUFFER_SIZE];
		ssize_t recvSize;
		ssize_t sentSize;

		// Receive and send back the data
		while (1)
		{
			// Receive from the socket
			recvSize = ReceiveFromSocket(env, obj, clientSocket,
					buffer, MAX_BUFFER_SIZE);

			if ((0 == recvSize) || (NULL != env->ExceptionOccurred()))
				break;

			// Send to the socket
			sentSize = SendToSocket(env, obj, clientSocket,
					buffer, (size_t) recvSize);

			if ((0 == sentSize) || (NULL != env->ExceptionOccurred()))
				break;
		}

		// Close the client socket
		close(clientSocket);
	}

exit:
	if (serverSocket > 0)
	{
		close(serverSocket);
	}
}
Exemple #7
0
JNIEXPORT void JNICALL Java_com_example_hellojni_Native_nativeStartTcpServer
(JNIEnv *env, jobject obj, jint port) {
// Construct a new TCP socket.
    int serverSocket = NewTcpSocket(env, obj);
    if (NULL == env->ExceptionOccurred())
    {
        // Bind socket to a port number
        BindSocketToPort(env, obj, serverSocket, (unsigned short) port);
        if (NULL != env->ExceptionOccurred())
            goto exit;

        // If random port number is requested
        if (0 == port)
        {
            // Get the port number socket is currently binded
            GetSocketPort(env, obj, serverSocket);
            if (NULL != env->ExceptionOccurred())
                goto exit;
        }

        // Listen on socket with a backlog of 4 pending connections
        ListenOnSocket(env, obj, serverSocket, 4);
        if (NULL != env->ExceptionOccurred())
            goto exit;

        // Accept a client connection on socket
        int clientSocket = AcceptOnSocket(env, obj, serverSocket);
        if (NULL != env->ExceptionOccurred())
            goto exit;

        char buffer[MAX_BUFFER_SIZE];
        ssize_t recvSize;
        ssize_t sentSize;

        // Receive and send back the data
        while (1)
        {
            // Receive from the socket
            recvSize = ReceiveFromSocket(env, obj, clientSocket,
                                         buffer, MAX_BUFFER_SIZE);

            if ((0 == recvSize) || (NULL != env->ExceptionOccurred()))
                break;

            // Send to the socket
            char prefix[] = "Server: ";
            char toSend[MAX_BUFFER_SIZE + strlen(prefix)];
            strcpy(toSend, prefix);
            strcat(toSend, buffer);
            sentSize = SendToSocket(env, obj, clientSocket,
                                    toSend, (size_t) strlen(toSend));
            if ((0 == sentSize) || (NULL != env->ExceptionOccurred()))
                break;
        }

        // Close the client socket
        close(clientSocket);
    }

exit:
    if (serverSocket > 0)
    {
        close(serverSocket);
    }
}
Exemple #8
0
JNIEXPORT void JNICALL Java_com_eric_ndkapp_ServerActivity_nativeStartServer
  (JNIEnv * env, jobject obj, jstring ip, jint port, jstring message)
{
	// Construct a new TCP socket.
	if (serverSocket > 0)
	{
		LogMessage(env, obj, "Server is running");
		return;
	}

	serverSocket = NewTcpSocket(env, obj);
	if (NULL == env->ExceptionOccurred())
	{
		// Get IP address as C string
		const char* ipAddress = env->GetStringUTFChars(ip, NULL);
		if (NULL == ipAddress)
			goto exit;

		// Bind socket to a port number
		BindSocketToPort(env, obj, serverSocket, ipAddress, (unsigned short) port);

		// Release the IP address
		env->ReleaseStringUTFChars(ip, ipAddress);

		if (NULL != env->ExceptionOccurred())
			goto exit;

		// Listen on socket with a backlog of 4 pending connections
		ListenOnSocket(env, obj, serverSocket, 4);
		if (NULL != env->ExceptionOccurred())
			goto exit;

		// Accept a client connection on socket
		int socket = 0;

		if (clientSocket == 0)
		{
			clientSocket = AcceptOnSocket(env, obj, serverSocket);
		}

		if (env->ExceptionOccurred() == NULL)
		{
			// Receive and send back the data
			char buffer[MAX_BUFFER_SIZE];
			ssize_t recvSize;
			ssize_t sentSize;

			// Get message as C string
			const char* messageText = env->GetStringUTFChars(message, NULL);
			if (NULL == messageText)
				goto exit;

			// Get the message size
			jsize messageSize = env->GetStringUTFLength(message);

			// Send to the socket
			sentSize = SendToSocket(env, obj, clientSocket, messageText, messageSize);

			// Release the message text
			env->ReleaseStringUTFChars(message, messageText);

			while ((recvSize = ReceiveFromSocket(env, obj, clientSocket, buffer, MAX_BUFFER_SIZE)) > 0)
			{
			}
		}
	}

exit:
	return;
}