Exemple #1
0
void redisplayStaffInfoIfNecessary(bit instanceFlag){
	if(inSetting==1){
		return;
	}
	
	if(isSetted==1){
		if((instanceFlag==1)){
			displayStaffInfo();
		}
	}
	showAddress(13,1);


}
int main(int argc, char** argv) {

	char buf[BUFLEN], rbuf[BUFLEN];	// transmitter and receiver buffers
	SOCKET s; 											// socket
	struct in_addr sIPaddr;					// server IP address structure
	struct sockaddr_in saddr; 			// server address structure
	uint16_t tport_n, tport_h;			// server port number by htons()
	char filename[FILELEN+1], fileDwnld[FILELEN+1], c1, c2;
	FILE* fp;
	int nread, fileCounter=0, readFileFlag=0, endFlag=0;
	uint32_t fileBytes, filePointer, timeStamp;
	fd_set cset;

	/* Check number of arguments */
	checkArg(argc, 3);
	
	/* Set IP address and port number of Server */
	setIParg(argv[1], &sIPaddr);
	tport_n = setPortarg(argv[2], &tport_h);

	/* Create the socket */
	fprintf(stdout, "Creating the socket...\n");
	s = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	fprintf(stdout, "- OK. Socket fd: %d\n", s);
	
	/* Prepare server address structure */
	saddr.sin_family = AF_INET;
	saddr.sin_port = tport_n;
	saddr.sin_addr = sIPaddr;

	/* Send connection request */
	fprintf(stdout, "Connecting to target address...\n");
	Connect(s, (struct sockaddr*) &saddr, sizeof(saddr));
	fprintf(stdout, "- OK. Connected to ");
	showAddress(&saddr);
	
	br();
	
	/* Ready to accept commands */
	fprintf(stdout, "Input a command: GET file, Q, A:\n");
	
	/* Main */
	while(1) {
	
		if ((readFileFlag == 0) && (endFlag == 1)) {
			break;
		}
		
		/* Set socket and stdin */
		FD_ZERO(&cset);
		FD_SET(s, &cset);
		FD_SET(fileno(stdin), &cset);
		Select(s+1, &cset, NULL, NULL, NULL);
		
		/* The socket is readable */
		if (FD_ISSET(s, &cset)) {
		
			if (readFileFlag == 0) {
				/* Response from server */
				nread = 0;
				do {
					Read(s, &c1, sizeof(char));
					rbuf[nread++] = c1;
				} while((c1 != '\n') && (nread < BUFLEN-1));
				rbuf[nread] = '\0';
				while((nread > 0) && ((rbuf[nread-1] == '\r') || (rbuf[nread-1] == '\n'))) {
					rbuf[nread-1] = '\0';
					nread--;
				}
				
				/* Compute the type of message received and behave according to it */
				if ((nread >= strlen(MSG_OK)) && (strncmp(rbuf, MSG_OK, strlen(MSG_OK)) == 0)) {
				
					// OK, right response received
					fprintf(stdout, "--- +OK message received.\n");
					sprintf(fileDwnld, "Dwnld_%d", fileCounter); // filename of received file
					fileCounter++;
					
					// Read the file size
					Read(s, rbuf, sizeof(uint32_t));
					fileBytes = ntohl(*(uint32_t*)rbuf);
					fprintf(stdout, "--- File size: %u\n", fileBytes);
				
					// Read the file timestamp
					Read(s, rbuf, sizeof(uint32_t));
					timeStamp = ntohl(*(uint32_t*)rbuf);
					fprintf(stdout, "--- File timestamp: %u\n", timeStamp);
					
					// Open file for writing
					fp = Fopen(fileDwnld, "wb");
					readFileFlag = 1;
					filePointer = 0;
					fprintf(stdout, "--- File %s opened for writing...\n", fileDwnld);
					
				} else if ((nread >= strlen(MSG_ERR)) && (strncmp(rbuf, MSG_ERR, strlen(MSG_ERR)) == 0)) {
					// ERROR
					fprintf(stderr, "--- ERROR. Message received: %s.\n", rbuf);
					break;
				} else {
					// ERROR
					fprintf(stderr, "--- ERROR. Something goes wrong with the communication protocol.\n");
					break;
				}
				
			} else if (readFileFlag == 1) {
				
				/* Read a character from the buffer and write it into the file */
				Read(s, &c2, sizeof(char));
				Fwrite(&c2, sizeof(char), 1, fp);
				filePointer++;
				
				/* Check if EOF */
				if (filePointer == fileBytes) {
					Fclose(fp);
					fprintf(stdout, "--- File received and written: %s\n", fileDwnld);
					readFileFlag = 0;
				}
			
			} else {
				// ERROR
				fprintf(stderr, "--- ERROR. Something goes wrong with the readFileFlag.\n");
				break;
			}
			
		}		
		
		/* The stdin is readable */
		if (FD_ISSET(fileno(stdin), &cset)) {
		
			if (fgets(buf, BUFLEN, stdin) == NULL) {
				buf[0] = 'Q';
			}
			
			switch(buf[0]) {
				case 'G':
				case 'g':
					sscanf(buf, "%*s %s", filename);
					sprintf(buf, "GET %s\r\n", filename);
					Write(s, buf, strlen(buf)*sizeof(char));
					fprintf(stdout, "- GET command sent.\n");
					break;
				case 'Q':
				case 'q':
					sprintf(buf, MSG_QUIT);
					Write(s, buf, strlen(buf)*sizeof(char));
					fprintf(stdout, "- Q command sent.\n");
					Shutdown(s, SHUT_WR);
					endFlag = 1;
					fprintf(stdout, "--- Waiting for file transfer to terminate...\n");
					return 0;
				case 'A':
				case 'a':
					fprintf(stdout, "--- Closing connection immediately...\n");
					closesocket(s);
					fprintf(stdout, "--- OK. Closed.\n");
					return 0;
				default:
					fprintf(stdout, "- Unknown command %c.\n", buf[0]);
					break;
			}
			
		}
		
	}
	
	br();
	
	/* Close the socket connection */
	fprintf(stdout, "Closing the socket connection...\n");
	closesocket(s);
	fprintf(stdout, "- OK. Closed.\n");

	return 0;
}
Exemple #3
0
MemoryEditor::MemoryEditor() {
  setObjectName("memory-editor");
  setWindowTitle("Memory Editor");
  setGeometryString(&config().geometry.memoryEditor);
  application.windowList.append(this);

  layout = new QGridLayout;
  layout->setMargin(Style::WindowMargin);
  layout->setSpacing(Style::WidgetSpacing);
  setLayout(layout);

  editor = new QHexEdit;
  editor->reader = { &MemoryEditor::reader, this };
  editor->writer = { &MemoryEditor::writer, this };
  editor->usage  = { &MemoryEditor::usage, this };
  memorySource = SNES::Debugger::MemorySource::CPUBus;
  layout->addWidget(editor, 0, 0);

  controlLayout = new QVBoxLayout;
  controlLayout->setSpacing(0);
  layout->addLayout(controlLayout, 0, 1);
  layout->setColumnStretch(0, 1);

  source = new QComboBox;
  source->addItem("S-CPU bus");
  source->addItem("S-APU bus");
  source->addItem("S-PPU VRAM");
  source->addItem("S-PPU OAM");
  source->addItem("S-PPU CGRAM");
  source->addItem("Cartridge ROM");
  source->addItem("Cartridge RAM");
  source->addItem("SA-1 bus");
  source->addItem("GSU bus");
  controlLayout->addWidget(source);
  controlLayout->addSpacing(2);

  addr = new QLineEdit;
  controlLayout->addWidget(addr);

  autoUpdateBox = new QCheckBox("Auto update");
  controlLayout->addWidget(autoUpdateBox);

  refreshButton = new QPushButton("Refresh");
  controlLayout->addWidget(refreshButton);

  toolLayout = new QHBoxLayout;
  controlLayout->addLayout(toolLayout);
  #define tool(widget, icon, text, slot, accel) \
    widget = new QToolButton; \
    toolLayout->addWidget(widget); \
    widget->setAutoRaise(true); \
    widget->setDefaultAction(new QAction(this)); \
    widget->defaultAction()->setIcon(QIcon(":16x16/mem-" icon ".png")); \
    widget->defaultAction()->setToolTip(text); \
    widget->defaultAction()->setShortcut(accel); \
    connect(widget->defaultAction(), SIGNAL(triggered()), this, SLOT(slot()))
  tool(prevCodeButton, "prev-code",    "Previous Code",    prevCode, 0);
  tool(nextCodeButton, "next-code",    "Next Code",        nextCode, 0);
  tool(prevDataButton, "prev-data",    "Previous Data",    prevData, 0);
  tool(nextDataButton, "next-data",    "Next Data",        nextData, 0);
  tool(prevUnkButton,  "prev-unknown", "Previous Unknown", prevUnknown, 0);
  tool(nextUnkButton,  "next-unknown", "Next Unknown",     nextUnknown, 0);
  toolLayout->addStretch();

  toolLayout = new QHBoxLayout;
  controlLayout->addLayout(toolLayout);
  tool(findButton,     "find",         "Find in Memory (Ctrl+F)",  search, Qt::Key_F | Qt::CTRL);
  // TODO: other icons for these maybe
  tool(findPrevButton, "prev-unknown", "Find again up (Shift+F3)", searchPrev, Qt::Key_F3 | Qt::SHIFT);
  tool(findNextButton, "next-unknown", "Find again down (F3)",     searchNext, Qt::Key_F3);
  toolLayout->addStretch();
  #undef tool

  spacer = new QWidget;
  spacer->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
  controlLayout->addWidget(spacer);

  exportButton = new QPushButton("Export");
  controlLayout->addWidget(exportButton);

  importButton = new QPushButton("Import");
  controlLayout->addWidget(importButton);

  statusBar = new QLabel;
  layout->addWidget(statusBar, 1, 0, 1, 2);

  connect(editor, SIGNAL(currentAddressChanged(qint64)), this, SLOT(showAddress(qint64)));
  connect(source, SIGNAL(currentIndexChanged(int)), this, SLOT(sourceChanged(int)));
  connect(addr, SIGNAL(textEdited(const QString&)), this, SLOT(updateOffset()));
  connect(addr, SIGNAL(returnPressed()), this, SLOT(updateOffset()));
  connect(refreshButton, SIGNAL(released()), this, SLOT(refresh()));
  connect(exportButton, SIGNAL(released()), this, SLOT(exportMemory()));
  connect(importButton, SIGNAL(released()), this, SLOT(importMemory()));

  sourceChanged(0);
}
int main(int argc, char** argv) {

	SOCKET s, s_acceptor;  			  		// socket and acceptor socket
	struct sockaddr_in saddr, caddr;  // server and client address structures
	uint16_t lport_n, lport_h; 				// server port number by htons()
	int backlog = 2;									// pending requests queue length
	socklen_t caddr_len;							// client address length
	int retValue;											// service() returning status
	int i;
	
	/* Check number of arguments */
	checkArg(argc, 3);
	
	/* The number of children */
	n_children = atoi(argv[2]);
	if (n_children > 10) {
		fprintf(stderr, "- ERROR. Children must be at most 10.\n");
		return -1;
	}
	
	/* Alloc memory for pids */
	pids = (pid_t*)malloc(n_children*sizeof(pid_t));
	if (pids == NULL) {
		fprintf(stderr, "- ERROR allocating pids.\n");
		return -1;
	}
	
	/* Instantiate a signal handler for SIGINT */
	Signal(SIGINT, sigintHandler);

	/* Initialize the socket API (only for Windows) */
	SockStartup();

	/* Set port number  */
	lport_n = setPortarg(argv[1], &lport_h);

	/* Create the socket */
	fprintf(stdout, "Creating the socket...\n");
	s = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	fprintf(stdout, "- OK. Socket fd: %d\n", s);
	
	/* Prepare server address structure */
	saddr.sin_family = AF_INET;
	saddr.sin_port = lport_n;
	saddr.sin_addr.s_addr = INADDR_ANY;

	/* Bind the socket to a local network address */
	fprintf(stdout, "Binding the socket...\n");
	Bind(s, (struct sockaddr*) &saddr, sizeof(saddr));
	fprintf(stdout, "- OK. Socket bound.\n");

	/* Listen to connection requests */
	fprintf(stdout, "Listen at socket %d with backlog = %d...\n", s, backlog);
	Listen(s, backlog);
	fprintf(stdout, "- OK. Socket is listening on ");
	showAddress(&saddr);
	
	for (i=0; i<n_children; i++) {
		
		if ((pids[i] = fork()) < 0) {
			fprintf(stderr, "- ERROR. fork() failed.\n");
		} else if ((pids[i]) > 0) {
			// The parent
		} else {
			// The child
			while(1) {
				/* Accept connection requests */
				br();
				caddr_len = sizeof(struct sockaddr_in);
				s_acceptor = Accept(s, (struct sockaddr*) &caddr, &caddr_len);
				fprintf(stdout, "- New connection from client ");
				showAddress(&caddr);
				
				retValue = service(s_acceptor);
				
				closesocket(s_acceptor);
				fprintf(stdout, "--- Connection closed by %s", (retValue == 0) ? "client\n" : "server\n");
				br();
			}
		}
		
	}
	
	while(1) {
		pause();
	}
	
	return 0;
}
int main(int argc, char** argv) {

	char rbuf[MAXBUF];							// transmitter and receiver buffers
	SOCKET s; 											// socket
	struct in_addr sIPaddr;					// server IP address structure
	struct sockaddr_in saddr; 			// server address structure
	uint16_t tport_n, tport_h;			// server port number by htons()
	char *filename;
	FILE* fp;
	uint32_t fileBytesN, fileBytes, nNext, nLeft;
	ssize_t nread, nwritten;
	
	XDR xdrs_in;											// Input XDR stream 
	XDR xdrs_out;											// Output XDR stream 
	FILE* stream_socket_r;						// FILE stream for reading from the socket
	FILE* stream_socket_w;						// FILE stream for writing to the socket
	call_msg reqMessage;
	response_msg resMessage;
	
	/* Check number of arguments */
	checkArg(argc, 4);
	
	prog_name = argv[0];
	
	/* Set IP address */
	setIParg(argv[1], &sIPaddr);
	
	/* Set port number  */
	tport_n = setPortarg(argv[2], &tport_h);
	
	/* Save the file to request */
	filename = argv[3];
	
	/* Create the socket */
	fprintf(stdout, "Creating the socket...\n");
	s = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	fprintf(stdout, "- OK. Socket fd: %d\n", s);
	
	/* Prepare server address structure */
	saddr.sin_family = AF_INET;
	saddr.sin_port = tport_n;
	saddr.sin_addr = sIPaddr;

	/* Send connection request */
	fprintf(stdout, "Connecting to target address...\n");
	Connect(s, (struct sockaddr*) &saddr, sizeof(saddr));
	fprintf(stdout, "- OK. Connected to ");
	showAddress(&saddr);
	
	/* Open FILE reading stream and bind it to the corresponding XDR stream */
	stream_socket_r = fdopen(s, "r");
	if (stream_socket_r == NULL) {
		fprintf(stderr, "---ERROR. fdopen() failed.\n");
		return 1;
	}
	xdrstdio_create(&xdrs_in, stream_socket_r, XDR_DECODE);

	/* Open FILE writing stream and bind it to the corresponding XDR stream */
	stream_socket_w = fdopen(s, "w");
	if (stream_socket_w == NULL) {
		fprintf(stderr, "---ERROR. fdopen() failed.\n");
		xdr_destroy(&xdrs_in);
		fclose(stream_socket_r);
		return 1;
	}
	xdrstdio_create(&xdrs_out, stream_socket_w, XDR_ENCODE);
	
	while(1) {
		/* Send a file request */
		reqMessage.ctype = GET;
		reqMessage.call_msg_u.filename = filename;
		if (!xdr_call_msg(&xdrs_out, &reqMessage)) {
			fprintf(stdout, "- ERROR sending GET message.\n");
			break;
		}
		fflush(stream_socket_w);
	
		/* Receive a message */
		if (!xdr_response_msg(&xdrs_in, &resMessage)) {
			fprintf(stdout, "- ERROR. Response xdr_response_msg() failed.\n");
			break;
		}
		fprintf(stdout, "- Received response.\n");
		
		
		if (resMessage == OK) {
				
			fprintf(stdout, "- File received: %s\n", filename);
			
			// Read the file size
			nread = read(s, (void*)&fileBytesN, sizeof(uint32_t));

			fileBytes = ntohl(fileBytesN);
			fprintf(stdout, "- File size: %u\n", fileBytesN);

			// Received and write file
			fp = Fopen(filename, "wb");
			nLeft = fileBytes;
			while(nLeft > 0) {
				
				if (nLeft < MAXBUF) {
					nNext = nLeft;
				} else {
					nNext = MAXBUF;
				}

				nread = Read(s, rbuf, nNext*sizeof(char));
				nwritten = Fwrite(rbuf, sizeof(char), nNext, fp);
				
				if (nread != nNext || nwritten != nNext) {
					fprintf(stdout, "--- ERROR saving file.\n");
					break;
				}
				
				nLeft -= nNext;

			}
			
			Fclose(fp);
			fprintf(stdout, "--- File written: %s\n", filename);
		
		} else if (resMessage == ERR) {
			fprintf(stderr, "- Received ERR message.\n");
			break;
		} else {
			fprintf(stderr, "- ERROR. Something goes wrong with the communication protocol.\n");
			break;
		}
		
		/* End the communication */
		reqMessage.ctype = QUIT;
		reqMessage.call_msg_u.filename = NULL;
		if (!xdr_call_msg(&xdrs_out, &reqMessage)) {
			fprintf(stdout, "- ERROR sending QUIT message.\n");
			break;
		}
		fprintf(stdout, "- QUIT message sent.\n");
		
		fflush(stream_socket_r);
		fflush(stream_socket_w);
		break;
	}
	
	xdr_destroy(&xdrs_in);
	fclose(stream_socket_r);
	xdr_destroy(&xdrs_out);
	fclose(stream_socket_w);
	
	/* Close the socket connection */
	fprintf(stdout, "Closing the socket connection...\n");
	closesocket(s);
	fprintf(stdout, "- OK. Closed.\n");
	
	return 0;
}