Esempio n. 1
0
static gboolean	listen_from_server(GIOChannel *io, GIOCondition condition,
				   void *cnt)
{
  gchar		buf[512];
  gsize		nbr;
  t_message	msg;

  debug("listen_from_server()");
  (void) condition;
  if (g_io_channel_read(io, buf, CLIENT_READ_BUF_SIZE, &nbr)
      != G_IO_ERROR_NONE)
    {
      g_io_channel_close(io);
      return (-1);
    }
  buf[nbr] = '\0';
  if (nbr > 0)
    {
      extract_msg((char *) buf, &msg);
      printf("[%s]\n", msg.command);
      mesg_init(cnt, &msg);
      insert_mesg_to_list(cnt, EMPTY, "server", trim(buf));
    }
  scrolled_window(cnt, SCROLL_MESG);
  g_io_add_watch(io, G_IO_IN, listen_from_server, cnt);
  return (0);
}
Esempio n. 2
0
packet * read_serial (){

	for (errors = 0; errors < MAXERRORS; errors ++){

        fgets(inbuf, BUFSIZ, dev);

       if ((extract_msg() < 0) &&
                 (printMode == VERBOSE))
			printf("ERROR: Corrupt packet.\n");

		else
            return inpacket;

        usleep(10);
	}

    return NULL;
}
Esempio n. 3
0
void PingTalk::evtMsg(const void* data, size_t size)
{
  if(size < sizeof(MsgHeader))
    return;
  
  MsgHeader* msg = (MsgHeader*)data;
  size_t rawsize = extract_msg(msg, size-sizeof(MsgHeader));
  
  if(mode == MODE_TALK){
    switch(msg->type){
      case TYPE_TEXT:
        printf("%s\n", (char*)(msg+1));
        break;
      case TYPE_FILE_START:
        printf("pingtalk: start downloading.\n");
        printf("open file: %s\n", (char*)(msg+1));
        
        fd_trans = open((char*)(msg+1), O_WRONLY|O_CREAT|O_TRUNC, 0666);
        if(fd_trans < 0){
          perror("pingtalk: open");
          fd_trans = 0;
          return;
        }
        
        mode = MODE_DOWNLOAD;
        break;
    }
  }else if(mode == MODE_DOWNLOAD){
    switch(msg->type){
      case TYPE_FILE_DATA:
#ifdef LOGGING
        printf("pingtalk: downloading.\n");
#endif
        write(fd_trans, msg+1, rawsize);
        break;
      case TYPE_FILE_FIN:
        printf("pingtalk: downloading completed.\n");
        close(fd_trans);
        fd_trans = 0;
        mode = MODE_TALK;
        break;
    }
  }
}