Esempio n. 1
0
int main(int argc, char *argv[]){
	if (argc <= 1){
		cout << "Plesae input command!" << endl;
		return NO_COMMAND_ERROR;
	}

	for (int i = 1; i < argc; i++){
		cout << argv[i] << endl;
	}

	ACE_INET_Addr address(1234, ACE_LOCALHOST);
	ACE_SOCK_CONNECTOR connector;
	ACE_SOCK_STREAM stream;


	if (connector.connect(stream, address) >= 0){
		for (int i = 1; i < argc; i++){
			string temp = string(argv[i]) + " ";
			if (stream.send_n(temp.c_str(),temp.length()) < 0){
				cout << "Stream message sending failed!" << endl;
				return STREAM_MESSAGE_SENDING_ERROR;
			}
		}
		stream.close();
	}
	else{
		cout << "Connector failed on connecting!" << endl;
		return CONNECTION_FAIL;
	}

	return SUCCESS;
}
Esempio n. 2
0
int main(int argc, char *argv[]){
	if (argc > 1){
		cout << "Please do not use command!" << endl;
		return TOO_MANY_COMMANDS_ERROR;
	}
	cout << argv[0] << endl;

	ACE_INET_Addr address(1234, ACE_LOCALHOST);
	ACE_SOCK_ACCEPTOR acceptor;
	ACE_SOCK_STREAM stream;

	if (acceptor.open(address, 1) >= 0){
		ACE_TCHAR temp[30];
		size_t n = 30;
		address.addr_to_string(temp,n);
		cout << temp << endl;
	}
	else{
		cout << "Sock acceptor open fail" << endl;
		return SOCK_ACCEPTOR_OPEN_FAIL;
	}

	for (;;){
		if (acceptor.accept(stream) < 0){
			cout << "Socket Connection failed!" << endl;
			return SOCKET_CONNECTION_FAIL;
		}
		char buf[BUFSIZ];
		int n;
		while ((n = stream.recv(buf, BUFSIZ)) > 0){
			_write(1, buf, n);
		}

		cout << "Socket is closed!" << endl;
		stream.close();

	}

	return SUCCESS;
}
Esempio n. 3
0
void RemoteFunc::execute() {
  ComValue arg1v(stack_arg(0));
  ComValue arg2v(stack_arg(1));
  ComValue arg3v(stack_arg(2));
  static int nowait_sym = symbol_add("nowait");
  ComValue nowaitv(stack_key(nowait_sym));
  reset_stack();

#ifdef HAVE_ACE

#if __GNUC__==3&&__GNUC_MINOR__<1
  fprintf(stderr, "Please upgrade to gcc-3.1 or greater\n");
  push_stack(ComValue::nullval());
  return;
#endif

  ACE_SOCK_STREAM *socket = nil;
  ACE_SOCK_Connector *conn = nil;
  SocketObj* socketobj = nil;
  const char* cmdstr = nil;
  if (arg1v.is_string() && arg2v.is_num() && arg3v.is_string()) {

    cmdstr = arg3v.string_ptr();
    const char* hoststr = arg1v.string_ptr();
    const char* portstr = arg2v.is_string() ? arg2v.string_ptr() : nil;
    u_short portnum = portstr ? atoi(portstr) : arg2v.ushort_val();
    ACE_INET_Addr addr (portnum, hoststr);
    socket = new ACE_SOCK_STREAM;
    conn = new ACE_SOCK_Connector;
    if (conn->connect (*socket, addr) == -1) {
      ACE_ERROR ((LM_ERROR, "%p\n", "open"));
      push_stack(ComValue::nullval());
      return;
    }

  } else if (arg1v.is_object() && arg2v.is_string()) {
    
    cmdstr = arg2v.string_ptr();
    socketobj = (SocketObj*)arg1v.geta(SocketObj::class_symid());
    if (socketobj) 
      socket = socketobj->socket();
    
  } else
    return;
  
#if 0
#if __GNUC__<3
  filebuf ofbuf;
  ofbuf.attach(socket->get_handle());
#elif __GNUC__<4 && !defined(__CYGWIN__)
  fileptr_filebuf ofbuf((int)socket->get_handle(), ios_base::out,
			false, static_cast<size_t>(BUFSIZ));
#else
  fileptr_filebuf ofbuf((int)socket->get_handle(), ios_base::out,
			static_cast<size_t>(BUFSIZ));
#endif
  ostream out(&ofbuf);
  out << cmdstr;
  if (cmdstr[strlen(cmdstr)-1] != '\n') out << "\n";
  out.flush();
#else
  int i=0;
  do {
    write(socket->get_handle(), cmdstr+i++, 1);
  } while ( cmdstr[i]!='\0');
  if (cmdstr[i-1] != '\n')  
    write(socket->get_handle(), "\n", 1);
#endif
  if (nowaitv.is_false()) {
#if __GNUC__<3
    filebuf ifbuf;
    ifbuf.attach(socket->get_handle());
    istream in(&ifbuf);
    char* buf;
    in.gets(&buf);
#else
    char buf[BUFSIZ];
    int i=0;
    do {
      read(socket->get_handle(), buf+i++, 1);
    } while (i<BUFSIZ-1 && buf[i-1]!='\n');
    if (buf[i-1]=='\n') buf[i]=0;
#endif
    ComValue retval(comterpserv()->run(buf, true));
    push_stack(retval);
  }
  
  if(!socketobj) {
    if (socket->close () == -1)
      ACE_ERROR ((LM_ERROR, "%p\n", "close"));
    delete socket;
    delete conn;
  }

  return;

#else

  cerr << "for the remote command to work rebuild comterp with ACE\n";
  return;

#endif

}