Exemplo n.º 1
0
void MainWindow::on_sendBtn_clicked()
{
    QFile *file = new QFile(QFileDialog::getOpenFileName(this, tr("Pick A Song To Send"), 0, tr("Music (*.wav)")));
    if (file->exists())
    {
        file->open(QIODevice::ReadOnly);
        ClientSend((HANDLE) _get_osfhandle(file->handle()));
    }
}
Exemplo n.º 2
0
void CLevel::net_Update	()
{
	if(game_configured){
		// If we have enought bandwidth - replicate client data on to server
		Device.Statistic->netClient2.Begin	();
		ClientSend					();
		Device.Statistic->netClient2.End		();
	}
	// If server - perform server-update
	if (Server && OnServer())	{
		Device.Statistic->netServer.Begin();
		Server->Update					();
		Device.Statistic->netServer.End	();
	}
}
DWORD WINAPI ClientControlThreadSend(LPVOID lpParameter)
{
    char *sendbuff = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char));
    char *recvbuff = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char));
    char *message = (char *)calloc(CONTROL_PACKET_SIZE + 1, sizeof(char));
    int flag = (int)lpParameter;
    int sentb = 0, recvb = 1, totalb = 0, i = 0;
    wchar_t path[260];

    switch (flag)
    {
    case GET_UPDATE_SONG_LIST:
        memset(recvbuff, 0, sizeof(recvbuff));
        memset(message, 0, sizeof(message));
        sendbuff[0] = flag;
        sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0);
        numSongs = 0;
        songRequestDone = 0;
        while(recvb != SOCKET_ERROR)
        {
            recvb = recv(controlSock, recvbuff, CONTROL_PACKET_SIZE, 0);
            strcat(message, recvbuff);
            totalb += recvb;
            if (totalb >= CONTROL_PACKET_SIZE)
            {
                if (message[0] == 0)
                {
                    break;
                }
                songList[i] = new char[100];
                strcpy(songList[i], message);
                i++;
                numSongs++;
                totalb -= CONTROL_PACKET_SIZE;
                memset(message, 0, sizeof(message));
            }
        }
        songRequestDone = 1;
        break;
    case SEND_SONG_TO_SERVER:
        sendbuff[0] = flag;
        strcat(sendbuff, sendFileName);
        sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0);
        while(totalb < CONTROL_PACKET_SIZE && recvb != SOCKET_ERROR)
        {
            recvb = recv(controlSock, recvbuff, CONTROL_PACKET_SIZE, 0);
            totalb += recvb;
        }
        if (recvbuff[0] == 0)
        {
            sendSockClosed = ClientSendSetup(address, sendSock, SERVER_DEFAULT_PORT);
            ClientSend(hSendFile);
        }
        break;
    case GET_SONG_FROM_SERVER:
        sendbuff[0] = flag;
        strcat(sendbuff, recvFileName);
        mbstowcs(&path[0], recvFileName, strlen(recvFileName));
        qDebug() << recvFileName;
        qDebug() << QString::fromWCharArray(path);
        DeleteFile(path);
        hReceiveFile = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
        ShowLastErr(false);
        hReceiveClosed = 1;
        ClientReceiveSetup(listenSock, CLIENT_DEFAULT_PORT, acceptEvent);
        ClientListen();
        sentb = send(controlSock, sendbuff, CONTROL_PACKET_SIZE, 0);
        break;
    default:
        qDebug() << "Invalid request";
        break;
    }
    free(sendbuff);
    free(recvbuff);
    free(message);
    return TRUE;
}
Exemplo n.º 4
0
//---------------------------------------------------------------------------
//  FUNCTION: void DoRnrClient (int nServiceType, char * pszServerName, DWORD dwNameSpace)
//
//  PURPOSE: Given the service type id "nServiceType", the server instance name
//           "pszServerName" and the name space to query "dwNameSpace", 
//           perform name resolution to the server and send a message to it.
//           If "nServiceType" is some known SAP Id such as Print Queue (3),
//           File Server (4), Job Server (5), Print Server (7), Archive
//           Server (9), Remote Bridge Server (36) or Advertising Print Server
//           (71), it will not send a message to the server.
//---------------------------------------------------------------------------
void DoRnrClient (int nServiceType, char * pszServerName, DWORD dwNameSpace)
{
    static GUID guid = SVCID_NETWARE ( nServiceType );  //use this as the class id
    WSAQUERYSET qs = {0};
    AFPROTOCOLS afp[g_nMaxNumOfSocks] = {{AF_IPX,  NSPROTO_IPX}, {AF_INET, IPPROTO_UDP}, {AF_INET6, IPPROTO_UDP}};
    HANDLE hLookup = NULL;
    DWORD dwResult = 0;
    static char szName[100] = {'\0'};
    BOOL fKnownSapId = FALSE;
    DWORD dwLength = 0;
    BYTE abyBuf[sizeof(WSAQUERYSET) + OFFSET] = {0}; // provide a sufficient large 
    // buffer for returned query set
    WSAQUERYSET * pQS = (WSAQUERYSETA*) abyBuf;
    HRESULT hRet;

    if(FAILED(hRet = StringCchCopy(szName,
                                   sizeof(szName)/sizeof(szName[0]),
                                   pszServerName
                                   )))
    {
        printf("StringCchCopy failed: 0x%x\n",hRet);
        return;
    }
    
    SecureZeroMemory (&qs, sizeof (WSAQUERYSET));
    qs.dwSize = sizeof (WSAQUERYSET);
    qs.lpszServiceInstanceName = szName; 
    qs.lpServiceClassId = &guid;
    qs.dwNameSpace = dwNameSpace;
    qs.dwNumberOfProtocols = g_nMaxNumOfSocks; 
    qs.lpafpProtocols = afp; 

    SecureZeroMemory (abyBuf, sizeof (WSAQUERYSET) + OFFSET);
    dwLength = sizeof(WSAQUERYSET) + OFFSET;

    // some well known SAP name space services
    if (nServiceType == 3 || nServiceType == 4 || nServiceType == 5 ||
        nServiceType == 7 || nServiceType == 9 || nServiceType == 36 || nServiceType == 71)
        fKnownSapId = TRUE;

    if (WSALookupServiceBegin ( &qs,
                                LUP_RETURN_ADDR | LUP_RETURN_NAME,
                                &hLookup) == SOCKET_ERROR)
    {
        PrintError("WSALookupServiceBegin");
        return;
    }

    printf ("Performing Query for service (type, name) = (%d, %s) . . .\n\n", nServiceType, pszServerName);

    if (strcmp(pszServerName, "*") == 0)
    {   // enumerate all service instances
        for (;;)
        {
            dwResult = WSALookupServiceNext(hLookup,
                                            0,
                                            &dwLength,
                                            pQS);
            if (dwResult == SOCKET_ERROR)
            {
                if (WSAGetLastError() == WSAEFAULT)
                {
                    printf("WSALookupServiceNext Error: Oops, we need a larger buffer size of : %d Bytes\n", dwLength);
                }
                else
                {
                    PrintError("WSALookupServiceNext");
                }
                WSALookupServiceEnd (hLookup);
                return;
            }

            if (!dwResult)
            {
                for (DWORD i = 0; i < pQS->dwNumberOfCsAddrs; i++)
                {
                    SOCKADDR_STORAGE *mypt = (SOCKADDR_STORAGE *) pQS->lpcsaBuffer[i].RemoteAddr.lpSockaddr;
                    if (mypt)
                    {
                        // we have valid remote sockaddr
                        char temp[DEFAULT_STRING_LEN] = {'\0'};

                        printf ("Name[%d]: %30s", i, pQS->lpszServiceInstanceName);
                        GetSockAddrString (mypt, pQS->lpcsaBuffer[i].RemoteAddr.iSockaddrLength, temp, DEFAULT_STRING_LEN);
                        printf("%40s\n", temp);

                        if (! fKnownSapId)
                            ClientSend(&(pQS->lpcsaBuffer[i]));
                    }
                }

            }
        }
    }
    else
    {
        dwResult = WSALookupServiceNext(hLookup,
                                        0,
                                        &dwLength,
                                        pQS);

        if (dwResult == SOCKET_ERROR)
        {
            if (WSAGetLastError() == WSAEFAULT)
            {
                printf("WSALookupServiceNext Error: Oops, we need a larger buffer size of : %d Bytes\n", dwLength);
            }
            else
            {
                PrintError("WSALookupServiceNext");
            }
            WSALookupServiceEnd (hLookup);
            return;
        }

        if (!dwResult)
        {
            for (DWORD i = 0; i < pQS->dwNumberOfCsAddrs; i++)
            {
                SOCKADDR_STORAGE *mypt = (SOCKADDR_STORAGE *) pQS->lpcsaBuffer[i].RemoteAddr.lpSockaddr;
                if (mypt)
                {
                    // we have valid remote sockaddr
                    char temp[DEFAULT_STRING_LEN] = {'\0'};
                    printf ("Name[%d]: %30s", i, pQS->lpszServiceInstanceName);
                    GetSockAddrString (mypt, pQS->lpcsaBuffer[i].RemoteAddr.iSockaddrLength, temp, DEFAULT_STRING_LEN);
                    printf("%40s\n", temp);

                    if (! fKnownSapId)
                        ClientSend(&(pQS->lpcsaBuffer[i]));
                }
            }       
        }
        WSALookupServiceEnd (hLookup);
    }   
}