static int module7_init(void)
{
	int port= 13394;
	struct socket* serversocket;
	struct socket* newsocks;
	size_t recieving, lens;

	char * Buffer;

	Buffer = (char*)__get_free_page(GFP_KERNEL);

	lens=strlen(Buffer); 

	serversocket= set_up_server_socket(port);
do{

	newsocks= server_accept_connection(serversocket); 

	recieving = RecvBuffer(newsocks, Buffer, lens);

	if (recieving<=0)
	{
	printk(KERN_INFO "Server:error when receiving message");
	}
	else
	{
	printk(KERN_INFO "Server received msg: %s",Buffer);
	}
}while(1);
	return 0;
}
Exemple #2
0
DWORD recv_cjhb::ThreadProc(void)
{
	int exit_code=0;

	clhb_ans ca;
	while(this->IsRunning())
	{
		//recv cjhb
		if(RecvBuffer((char*)&ca,sizeof(ca)))
		{
			//invoke OnRecvCJHB
			OnRecvCJHB(&(ca.cr));
		}
		else
		{
			exit_code=-1;
			break;
		}
	}
	//invoke OnTerminate

	OnTerminate(exit_code);

	Disconnect();

	return 0;
}
Exemple #3
0
bool RecvFileStream( SOCKET sock, FILE* pf, unsigned long flsize, int nBufSize )
{
	ASSERT( NULL!=pf );

	//receive the file content.
	unsigned long lAvailBytes = flsize;

	char* pBuf = new char[nBufSize];
	try{
		while( lAvailBytes>0 && !ferror(pf) ){
			int nAvailBuf = min( (unsigned long)nBufSize, lAvailBytes );
			RecvBuffer( sock, pBuf, nAvailBuf );
			fwrite( pBuf, 1, nAvailBuf, pf );

			lAvailBytes -= nAvailBuf;
		}
	}catch( CSockException* ){
		delete[] pBuf;
		pBuf = NULL;
		throw;
	}

	delete[] pBuf;
	pBuf = NULL;
	return !ferror( pf );
}
static int module7_init(void)
{
	int port= 13394;

	size_t recieving;
   
	struct netlink_kernel_cfg cfg = {
                .groups = 1,
                .input = netlinkmsg,
        };
        nl_sk = netlink_kernel_create(&init_net, 3, &cfg);

	Buffer = (char*)__get_free_page(GFP_KERNEL);
 
	serversocket= set_up_server_socket(port);
	newsocks= server_accept_connection(serversocket); 

	

	recieving = RecvBuffer(newsocks, Buffer, 1024);
	if (recieving<=0)
	{
	printk(KERN_INFO "Server:error when receiving message\n");
	}
	else
	{
	printk(KERN_INFO "Server received msg: %s  \n",Buffer);

	}


file1 = debugfs_create_file("mmap_example1", 0644, NULL, NULL, &my_fops);
	if (file1 == NULL)
	{
   	 	printk(KERN_ALERT "Error occurred\n");
   	}
	else
	{
   		printk("The creation of the file should has occured\n");
    		printk("The pointer value of the create file %p \n", &file1);
	}


	
	
 	
  return 0;
}
static void module7_exit(void)
{

sock_release(serversocket);
sock_release(newsocks);
	debugfs_remove(file1);
 	netlink_kernel_release(nl_sk);
	printk(KERN_ALERT "Server exiting \n");
	return;
}
Exemple #5
0
HRESULT CClientSession::DoListDir( const string& strPath, EnumNetfEntryProc pEnumProc )
{
	//step 1. request passive mode to get the data channel address
	u_int nPasPort = 0;
	HRESULT hRet = DoPassive( nPasPort );
	if( FAILED(hRet) )return hRet;

	//step 2. send the put file command.
	CMessage1Param<char*>* pMsgList = (CMessage1Param<char*>*)CMessageBase::Alloc( sizeof(CMessageBase)+strPath.length()+1 );
	pMsgList->Init( NCM_LISTDIR, GetAddr(), GetServAddr(), strPath.c_str() );
	CMessageTrash trash1(pMsgList);
	m_pClntProxy->SendMessage( pMsgList );

	CMessageBase* pMsgAck = WaitForMessage( NCF_ACK|NCM_LISTDIR );
	CMessageTrash trash2(pMsgAck);
	if( !pMsgAck->IsSucceeded() )return pMsgAck->GetResult();

	//step 3. now the server agrees on the file transfer, connect the data channel and send file
	SOCKET sock_stream = OpenStream( nPasPort );
	if( sock_stream==INVALID_SOCKET )return E_OPENSTREAM;

	//open the data stream channel.
/*	CMessageBase msg;
	msg.Init( NCM_OPENSTREAM, GetAddr(), GetServAddr() );
	SendMessage( sock_stream, &msg );
	CMessageBase* pMsg = RecvMessage<CMessageBase>( sock_stream );
	if( pMsg==NULL ){
		closesocket( sock_stream );
		return E_OPENSTREAM;
	}

	CMessageTrash trash3(pMsg);
	if( pMsg->IsFailed() ){
		closesocket( sock_stream );
		return pMsg->GetResult();
	}*/

	NETF_ENTRY entry;
	int nLen = 0;
	while( true ){
		if( RecvBuffer( sock_stream, (char*)&entry, sizeof(NETF_ENTRY) )<sizeof(NETF_ENTRY) )break;

		(*pEnumProc)( &entry );
		nLen += sizeof(NETF_ENTRY);
	}
	closesocket( sock_stream );

	//step 4. exchange the error code.
	CMessageBase msg;
	msg.Init( NCM_STREAMLENGTH, GetAddr(), GetServAddr(), nLen );
	m_pClntProxy->SendMessage( &msg );

	CMessageBase* pMsg = WaitForMessage( NCF_ACK|NCM_STREAMLENGTH );
	CMessageTrash trash4(pMsg);

	return pMsg->GetResult();
}
//*=================================================================================
//*原型: bool ReadRequestPacket(TSmartPacket& Packet)
//*功能: 接求一个请求包
//*参数: 无
//*返回: 无
//*说明: 无
//*=================================================================================
bool TSmartOutThread::ReadRequestPacket(SOCKET hSocket, TSmartPacket& Packet)
{
	//读入包头数据
	long nLength = sizeof(TSSmartPacket);
	long nRecvLen = RecvBuffer(hSocket, Packet.GetBuffer(), nLength, 1000);

	TSSmartPacket *pPacket = (TSSmartPacket*)Packet.GetBuffer();

	if( nRecvLen != nLength )
	{
//		ReportLog("包头长度不对! 读入的数据包不合法!");
		return false;
	}

	nLength = Packet.GetDataLength() + 1 ;
	if( nLength > 0 )
	{
		if( RecvBuffer(hSocket, Packet.GetDataBuffer(), nLength, 1000) != nLength )
		{
//			printf("不能接收包内的数据!\n");
			DebugPrint("不能接收包内的数据!");
			return false;
		}

		nRecvLen+=nLength;
	}

	ReportLog("读入数据包:[%s]\n", Packet.m_Buffer);

	if( !Packet.IsValid(nRecvLen) )
	{
//		printf("包头校验错!读入的数据包不合法!\n");
		DebugPrint("读入的数据包不合法!");
		return false;
	}

	return true;
}
Exemple #7
0
int main()
{
    struct sockaddr_in serveraddr;
    int sock = -1;
    int err = 0;
    char buffer[BUFFER_SIZE];
    
    do {
        memset(&serveraddr,0,sizeof(serveraddr));
        serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");
        serveraddr.sin_port=htons(8887);
        serveraddr.sin_family=AF_INET;

        sock = socket(AF_INET,SOCK_STREAM,0);
        if ( -1 == sock ) {
            debug_log("create socket failed",errno);
            break;
        }

        err = connect(sock,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
        if ( 0 != err ) {
            debug_log("connect server failed",err);
            break;
        }

        /**
         *连接成功,发送消息,接受消息
         */
        printf("please input the message:");
        scanf("%s",buffer);

        err = SendBuffer(sock,buffer);
        if ( 0 != err ) {
            break;
        }

        err = RecvBuffer(sock,buffer);
        if ( 0 != err ) {
            break;
        }

    } while(0);

    if ( -1 != sock ) {
        close(sock);
        sock = -1;
    }

    return err;
}
static int module7_init(void)
{

	int port= 13394;
	unsigned int IP_addr= 168430083;
	size_t sendings;
	char *sendbuff;
        struct socket* serversock;
	struct socket* newsocket;
	size_t recieve;
	size_t length;
	size_t lens;
	char *recvbuffer;
	recvbuffer = (char*)__get_free_page(GFP_KERNEL);
	sendbuff= "hi i am thinh";
	//file1 = debugfs_create_file("mmap_example1", 0644, NULL, NULL, &my_fops);
/*
  	//setup_timer(&my_timer, my_timer_callback, 0 );
	if (file1 == NULL)
	{
   	 	printk(KERN_ALERT "Error occurred\n");
   	}
	else
	{
   		printk("The creation of the file should has occured\n");
    		printk("The pointer value of the create file %p \n", &file1);
    	}
*/      lens = strlen(recvbuffer);
	serversock=set_up_server_socket(port);
do{
	newsocket = server_accept_connection(serversock);
	recieve = RecvBuffer(newsocket, recvbuffer, lens);
	if (recieve <= 0)
	{
		printk("Client Error when recieving msg");
		break;
	}
	else
	{
		printk("ClientMSG recieved: %s \n", recvbuffer);
	}
 }while(1);
	socketz=set_up_client_socket(IP_addr,port);
	length=strlen(sendbuff);
	sendings= SendBuffer(socketz, sendbuff, length);
	sock_release(newsocket);
	sock_release(socketz);	
   return 0;
}
static int module7_init(void)
{

	int port= 13394;
	unsigned int IP_addr= 3232250007;
       // int ret=25;
       // int ret2=0;
	size_t sendings;
	size_t recievedmsg;
	char *sendbuff;
    char *recvbuff;

	size_t length;
	size_t lens2;
	int i;

recvbuff= (char*)__get_free_page(GFP_KERNEL);
lens2=20;


	sendbuff= "Client: please put this in send mmap_example1";
	

	socketz=set_up_client_socket(IP_addr,port);
	//length=strlen(sendbuff);
	length=45; 
	sendings= SendBuffer(socketz, sendbuff, length);
	
		for (i=0;i<5;i++)
{		
		recievedmsg=RecvBuffer(socketz,recvbuff,lens2);	
		if(recievedmsg<0)
		{
			printk("could not recieve msg\n");
		}
		else
		{
		recvbuff= kmalloc(sizeof(recvbuff),GFP_KERNEL);
		//	lens2=strlen(recvbuff);
		}
		

}	
   return 0;
}
Exemple #10
0
/*!
    Set the recevies in "continuous" mode.

    When the recives are in "continuous" mode they will be restarted as soon
    as they end. In this way there is always a buffer ready for receiveing
    data.

    Calling this function will cancels all current receives.

    \param enabled if set to true enables the "continuous" mode.
*/
void DataCommunicator::setRecvsContinuous(bool enabled)
{
    if (m_recvsContinuous == enabled) {
        return;
    }

    cancelAllRecvs();

    int nRecvBuffers = m_recvBuffers.size();
    for (int k = 0; k < nRecvBuffers; ++k) {
        size_t capacity = m_recvBuffers[k].capacity();
        m_recvBuffers[k] = RecvBuffer(capacity, enabled);
    }

    m_recvsContinuous = enabled;

    startAllRecvs();
}
Exemple #11
0
//Send DNS requesting process
size_t __fastcall SendProcess(const sockaddr_storage Target)
{
//Initialization
	std::shared_ptr<char> Buffer(new char[BufferSize]()), RecvBuffer(new char[BufferSize]());
	SSIZE_T DataLength = 0;
	LARGE_INTEGER CPUFrequency = {0}, BeforeTime = {0}, AfterTime = {0};
	SOCKET Socket = 0;
	int AddrLen = 0;

//IPv6
	if (Protocol == AF_INET6)
	{
	//Socket initialization
		AddrLen = sizeof(sockaddr_in6);
		if (RawSocket && RawData)
			Socket = socket(AF_INET6, SOCK_RAW, ServiceName);
		else 
			Socket = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
		if (Socket == INVALID_SOCKET)
		{
			wprintf(L"Socket initialization error, error code is %d.\n", WSAGetLastError());

			WSACleanup();
			return EXIT_FAILURE;
		}
	}
//IPv4
	else {
	//Socket initialization
		AddrLen = sizeof(sockaddr_in);
		if (RawSocket && RawData)
			Socket = socket(AF_INET, SOCK_RAW, ServiceName);
		else 
			Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
		if (Socket == INVALID_SOCKET)
		{
			wprintf(L"Socket initialization error, error code is %d.\n", WSAGetLastError());

			WSACleanup();
			return EXIT_FAILURE;
		}
	}

//Set socket timeout.
	if (setsockopt(Socket, SOL_SOCKET, SO_SNDTIMEO, (PSTR)&SocketTimeout, sizeof(int)) == SOCKET_ERROR || 
		setsockopt(Socket, SOL_SOCKET, SO_RCVTIMEO, (PSTR)&SocketTimeout, sizeof(int)) == SOCKET_ERROR)
	{
		wprintf(L"Set UDP socket timeout error, error code is %d.\n", WSAGetLastError());
		return EXIT_FAILURE;
	}

//Set IP options.
	if (Protocol == AF_INET6) //IPv6
	{
		if (IP_HopLimits != 0 && setsockopt(Socket, IPPROTO_IP, IPV6_UNICAST_HOPS, (PSTR)&IP_HopLimits, sizeof(int)) == SOCKET_ERROR)
		{
			wprintf(L"Set HopLimit/TTL flag error, error code is %d.\n", WSAGetLastError());
			return EXIT_FAILURE;
		}
	}
	else { //IPv4
		if (IP_HopLimits != 0 && setsockopt(Socket, IPPROTO_IP, IP_TTL, (PSTR)&IP_HopLimits, sizeof(int)) == SOCKET_ERROR)
		{
			wprintf(L"Set HopLimit/TTL flag error, error code is %d.\n", WSAGetLastError());
			return EXIT_FAILURE;
		}

	//Set "Don't Fragment" flag.
		int iIPv4_DF = 1;
		if (IPv4_DF && setsockopt(Socket, IPPROTO_IP, IP_DONTFRAGMENT, (PSTR)&iIPv4_DF, sizeof(int)) == SOCKET_ERROR)
		{
			wprintf(L"Set \"Don't Fragment\" flag error, error code is %d.\n", WSAGetLastError());
			return EXIT_FAILURE;
		}
	}

//Make packet.
	if (!RawData)
	{
	//DNS requesting
		memcpy(Buffer.get() + DataLength, &HeaderParameter, sizeof(dns_hdr));
		if (HeaderParameter.ID == 0)
		{
			auto pdns_hdr = (dns_hdr *)(Buffer.get() + DataLength);
			pdns_hdr->ID = htons((uint16_t)GetCurrentProcessId());
		}
		DataLength += sizeof(dns_hdr);
		DataLength += CharToDNSQuery((PSTR)TestDomain.c_str(), Buffer.get() + DataLength);
		memcpy(Buffer.get() + DataLength, &QueryParameter, sizeof(dns_qry));
		DataLength += sizeof(dns_qry);
		if (EDNS0)
		{
			memcpy(Buffer.get() + DataLength, &EDNS0Parameter, sizeof(dns_edns0_label));
			DataLength += sizeof(dns_edns0_label);
		}
	}
	else {
		if (BufferSize >= RawDataLen)
		{
			memcpy(Buffer.get(), RawData.get(), RawDataLen);
			DataLength = RawDataLen;
		}
		else {
			memcpy(Buffer.get(), RawData.get(), BufferSize);
			DataLength = BufferSize;
		}
	}

//Send.
	if (QueryPerformanceFrequency(&CPUFrequency) == 0 || QueryPerformanceCounter(&BeforeTime) == 0)
	{
		wprintf(L"Get current time form High Precision Event Timer/HPET error, error code is %d.\n", (int)GetLastError());
		return EXIT_FAILURE;
	}
	sendto(Socket, Buffer.get(), (int)DataLength, NULL, (PSOCKADDR)&Target, AddrLen);

//Receive.
	DataLength = recvfrom(Socket, RecvBuffer.get(), (int)BufferSize, NULL, (PSOCKADDR)&Target, &AddrLen);
	if (QueryPerformanceCounter(&AfterTime) == 0)
	{
		wprintf(L"Get current time form High Precision Event Timer/HPET error, error code is %d.\n", (int)GetLastError());
		return EXIT_FAILURE;
	}

//Get waiting time.
	long double Result = (long double)((AfterTime.QuadPart - BeforeTime.QuadPart) * (long double)1000 / (long double)CPUFrequency.QuadPart);

//Print to screen.
	if (DataLength > 0)
	{
		wprintf(L"Receive from %ls:%u -> %d bytes, waiting %lf ms.\n", wTargetString.c_str(), ntohs(ServiceName), (int)DataLength, Result);
	
	//Output to file.
		if (OutputFile != nullptr)
			fwprintf_s(OutputFile, L"Receive from %ls:%u -> %d bytes, waiting %lf ms.\n", wTargetString.c_str(), ntohs(ServiceName), (int)DataLength, Result);

		TotalTime += Result;
		RecvNum++;

	//Mark time.
		if (MaxTime == 0)
		{
			MinTime = Result;
			MaxTime = Result;
		}
		else if (Result < MinTime)
		{
			MinTime = Result;
		}
		else if (Result > MaxTime)
		{
			MaxTime = Result;
		}

	//Transmission interval
		if (TransmissionInterval != 0 && TransmissionInterval > Result)
			Sleep((DWORD)(TransmissionInterval - Result));
		else 
			Sleep(TIME_OUT - (DWORD)Result);
	}
	else { //SOCKET_ERROR
		wprintf(L"Receive error: %d(%d), waiting %lf ms.\n", (int)DataLength, WSAGetLastError(), Result);

	//Output to file.
		if (OutputFile != nullptr)
			fwprintf_s(OutputFile, L"Receive error: %d(%d), waiting %lf ms.\n", (int)DataLength, WSAGetLastError(), Result);

	//Transmission interval
		if (TransmissionInterval != 0 && TransmissionInterval > Result)
			Sleep((DWORD)(TransmissionInterval - Result));
		else if (Result <= TIME_OUT)
			Sleep(TIME_OUT);
	}

	return EXIT_SUCCESS;
}
Exemple #12
0
HRESULT CClientSession::DoListDir( const string& strPath, EnumNetfEntryProc pEnumProc )
{
	//step 1. request passive mode to get the data channel address
	u_int nPasPort = 0;
	HRESULT hRet = DoPassive( nPasPort );
	if( FAILED(hRet) )return hRet;

	//step 2. send the put file command.
	CMessageHead* pMsg = (CMessageHead*)new char[sizeof(CMessageHead)+strPath.length()+1];
	pMsg->Init( NCM_LISTDIR, GetAddr(), GetServAddr() );
	pMsg->SetLength( sizeof(CMessageHead)+strPath.length()+1 );
	strcpy( pMsg->GetData(), strPath.c_str() );
	m_pClntProxy->SendMessage( pMsg );

	CMessageHead* pMsgAck = GetMessage( NCF_ACK|NCM_LISTDIR );
	CMessageTrash trash(pMsgAck);
	if( !pMsgAck->IsSucceeded() )return pMsgAck->GetResult();

	//step 3. now the server agrees on the file transfer, connect the data channel and send file
	SOCKADDR_IN addr;
	addr.sin_family = AF_INET;
	addr.sin_addr = GetServAddr().m_addrHost;
	addr.sin_port = htons( (u_short)nPasPort );

	SOCKET sock_stream;
	//import, must retry the socket initilization a few times.
	int i;
	for( i=0; i<MAXRETRY; i++ ){
		sock_stream = Socket( PF_INET, SOCK_STREAM, 0 );
		ASSERT( sock_stream!=INVALID_SOCKET );

		if( ::connect( sock_stream, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN) )==0 )break;
		closesocket( sock_stream );
	}
	if( i>=MAXRETRY )throw new CSockException();

	//open the data stream channel.
	CMessageHead msg;
	msg.Init( NCM_OPENSTREAM, GetAddr(), GetServAddr() );
	msg.Send( sock_stream );
	pMsg = RecvMessage( sock_stream );
	CMessageTrash trash2(pMsg);
	if( pMsg->IsFailed() ){}

	NETF_ENTRY entry;
	int nLen = 0;
	while( true ){
		try{
			RecvBuffer( sock_stream, (char*)&entry, sizeof(NETF_ENTRY) );
		}catch( CSockException* e ){
			e->Delete();
			break;
		}

		(*pEnumProc)( &entry );
		nLen += sizeof(NETF_ENTRY);
	}
	closesocket( sock_stream );

	//step 4. exchange the error code.
	msg.Init( NCM_STREAMLENGTH, GetAddr(), GetServAddr(), nLen );
	m_pClntProxy->SendMessage( &msg );

	pMsg = GetMessage( NCF_ACK|NCM_STREAMLENGTH );
	CMessageTrash trash3(pMsg);

	return pMsg->GetResult();
}
Exemple #13
0
void RecvNetfStat( SOCKET sock, PNETF_STAT pStat )
{
	RecvBuffer( sock, (char*)pStat, sizeof(NETF_STAT) );
}