Example #1
0
int tsClient :: length()
{
    unsigned char* bufLength = new unsigned char[4];
    memset(bufLength,0,4);
    memcpy(bufLength,buffer,4);
    Storage length_storage(bufLength,4);
    int NN = length_storage.readInt() - 4;
    delete[] bufLength;
    return NN;
}
Example #2
0
bool
SocketNs3::
receiveExact(StorageNs3 &msg)
throw(SocketException)
{
    /* receive length of vector */
    unsigned char* bufLength = new unsigned char[4];
    int bytesRead = 0;
    int readThisTime = 0;

    while (bytesRead<4) {
        readThisTime = recv(socket_, (char*)(bufLength + bytesRead), 4-bytesRead, 0);

        if (readThisTime <= 0)
            BailOnSocketError("tcpip::SocketNs3::receive() @ recv");

        bytesRead += readThisTime;
    }
    StorageNs3 length_storage(bufLength,4);
    int NN = length_storage.readInt() - 4;

    /* receive vector */
    unsigned char* buf = new unsigned char[NN];
    bytesRead = 0;
    readThisTime = 0;

    while (bytesRead<NN) {
        readThisTime = recv(socket_, (char*)(buf + bytesRead), NN-bytesRead, 0);

        if (readThisTime <= 0)
            BailOnSocketError("tcpip::SocketNs3::receive() @ recv");

        bytesRead += readThisTime;
    }
    msg.reset();
    msg.writePacket(buf, NN);

    if (verbose_) {
        cerr << "Rcvd Storage with "  << 4 + NN <<  " bytes via tcpip::SocketNs3: [";
        for (int i=0; i < 4; ++i) {
            cerr << " " << (int)bufLength[i] << " ";
        }
        for (int i=0; i < NN; ++i) {
            cerr << " " << (int)buf[i] << " ";
        }
        cerr << "]" << endl;
    }

    delete[] buf;
    delete[] bufLength;
    return true;
}
	bool
		NetStreamSocket::
		receiveExact( NetStreamStorage &msg )
		throw( NetStreamSocketException )
	{
		/* receive length of vector */
		unsigned char * const bufLength = new unsigned char[4];
		int bytesRead = 0;
		int readThisTime = 0;
		
		while (bytesRead<4)
		{
			readThisTime = recv( socket_, (char*)(bufLength + bytesRead), 4-bytesRead, 0 );

			if( readThisTime <= 0 )
			{
				// BailOnNetStreamSocketError definitely throws an exception so clear up heap
				delete[] bufLength;
				BailOnNetStreamSocketError( "NetStreamSocket::receive() @ recv" );
			}

			bytesRead += readThisTime;
		}
		NetStreamStorage length_storage(bufLength,4);
		int NN = length_storage.readInt() - 4;

		/* receive vector */
		unsigned char * const buf = new unsigned char[NN];
		bytesRead = 0;
		readThisTime = 0;
		
		while (bytesRead<NN)
		{
			readThisTime = recv( socket_, (char*)(buf + bytesRead), NN-bytesRead, 0 );

			if( readThisTime <= 0 )
			{
				// BailOnNetStreamSocketError definitely throws an exception so clear up heap
				delete[] bufLength;
				delete[] buf;
				BailOnNetStreamSocketError( "netstream::NetStreamSocket::receive() @ recv" );
			}

			bytesRead += readThisTime;
		}
		msg.reset();
		msg.writePacket(buf, NN);
		
		if (verbose_)
		{
			cerr << "Rcvd Storage with "  << 4 + NN <<  " bytes via netstream::NetStreamSocket: [";
			for (int i=0; i < 4; ++i)
			{
				cerr << " " << (int)bufLength[i] << " ";
			}
			for (int i=0; i < NN; ++i)
			{
				cerr << " " << (int)buf[i] << " ";
			}
			cerr << "]" << endl;
		}

		delete[] buf;
		delete[] bufLength;
		return true;
	}