예제 #1
0
파일: shotgun.c 프로젝트: Limsik/e17
static Eina_Bool
ev_write(Shotgun_Auth *auth, int type __UNUSED__, Ecore_Con_Event_Server_Write *ev)
{
   if ((auth != ecore_con_server_data_get(ev->server)) || (!auth))
     return ECORE_CALLBACK_PASS_ON;
   ecore_timer_reset(auth->keepalive);
   return ECORE_CALLBACK_RENEW;
}
예제 #2
0
파일: shotgun.c 프로젝트: Limsik/e17
static Eina_Bool
error(Shotgun_Auth *auth, int type __UNUSED__, Ecore_Con_Event_Server_Error *ev)
{
   if ((auth != ecore_con_server_data_get(ev->server)) || (!auth))
     return ECORE_CALLBACK_PASS_ON;
   ERR("%s", ev->error);
   shotgun_disconnect(auth);
   return ECORE_CALLBACK_RENEW;
}
예제 #3
0
파일: enfeeble.c 프로젝트: zmike/enfeeble
static Eina_Bool
error(Enfeeble *enf, int type __UNUSED__, Ecore_Con_Event_Server_Error *ev)
{
   if ((enf != ecore_con_server_data_get(ev->server)) || (!enf))
     return ECORE_CALLBACK_PASS_ON;
   ERR("%s", ev->error);
   enfeeble_disconnect(enf);
   return ECORE_CALLBACK_RENEW;
}
예제 #4
0
Eina_Bool
upgrade_pop(Email *e, int type __UNUSED__, Ecore_Con_Event_Server_Upgrade *ev)
{
   if (e != ecore_con_server_data_get(ev->server)) return ECORE_CALLBACK_PASS_ON;

   e->state++;
   email_login_pop(e, NULL);
   return ECORE_CALLBACK_RENEW;
}
예제 #5
0
파일: enfeeble.c 프로젝트: zmike/enfeeble
static Eina_Bool
con(Enfeeble *enf, int type __UNUSED__, Ecore_Con_Event_Server_Add *ev)
{
   if ((enf != ecore_con_server_data_get(ev->server)) || (!enf))
     return ECORE_CALLBACK_PASS_ON;

   INF("Connected");
   ecore_event_add(ENFEEBLE_EVENT_CONNECT, enf, enfeeble_fake_free, NULL);
   return EINA_FALSE;
}
예제 #6
0
파일: shotgun.c 프로젝트: Limsik/e17
static Eina_Bool
disc(Shotgun_Auth *auth, int type __UNUSED__, Ecore_Con_Event_Server_Del *ev)
{
   if ((auth != ecore_con_server_data_get(ev->server)) || (!auth))
     return ECORE_CALLBACK_PASS_ON;

   INF("Disconnected");
   ecore_con_server_del(auth->svr);
   auth->svr = NULL;
   shotgun_disconnect(auth);
   return EINA_FALSE;
}
예제 #7
0
파일: enfeeble.c 프로젝트: zmike/enfeeble
static Eina_Bool
disc(Enfeeble *enf, int type __UNUSED__, Ecore_Con_Event_Server_Del *ev)
{
   if ((enf != ecore_con_server_data_get(ev->server)) || (!enf))
     return ECORE_CALLBACK_PASS_ON;

   INF("Disconnected");
   ecore_con_server_del(enf->svr);
   enf->svr = NULL;
   enf->ev_del = NULL;
   ecore_event_add(ENFEEBLE_EVENT_DISCONNECT, enf, enfeeble_fake_free, NULL);
   return EINA_FALSE;
}
예제 #8
0
static Eina_Bool _con_server_add(void *data, int type, Ecore_Con_Event_Server_Add *ev)
{
    AVReceiver *o = reinterpret_cast<AVReceiver *>(data);

    if (ev && ev->server && (o != ecore_con_server_data_get(ev->server)))
        return ECORE_CALLBACK_PASS_ON;

    if (o)
        o->addConnection(ev->server);
    else
        cCriticalDom("output") << "failed to get object !";
    return ECORE_CALLBACK_RENEW;
}
예제 #9
0
파일: smtp_handlers.c 프로젝트: Limsik/e17
Eina_Bool
upgrade_smtp(Email *e, int type __UNUSED__, Ecore_Con_Event_Server_Upgrade *ev)
{
   char *buf;
   size_t size;

   if (e != ecore_con_server_data_get(ev->server)) return ECORE_CALLBACK_PASS_ON;

   e->state++;
   size = sizeof(char) * (sizeof("EHLO \r\n") + strlen(e->features.smtp_features.domain));

   buf = alloca(size);
   snprintf(buf, size, "EHLO %s\r\n", e->features.smtp_features.domain);
   email_write(e, buf, size - 1);
   return ECORE_CALLBACK_RENEW;
}
예제 #10
0
Eina_Bool _ecore_con_handler_client_del(void *data, int type, Ecore_Con_Event_Client_Del *ev)
{
    HttpServer *tcpserver = reinterpret_cast<HttpServer *>(data);

    if (ev && (tcpserver != ecore_con_server_data_get(ecore_con_client_server_get(ev->client))))
    {
        return ECORE_CALLBACK_PASS_ON;
    }

    if (tcpserver)
    {
        tcpserver->delConnection(ev->client);
    }
    else
    {
        cCriticalDom("network") << "failed to get HttpServer object !";
    }

    return ECORE_CALLBACK_CANCEL;
}
예제 #11
0
Eina_Bool _ecore_con_handler_data_write(void *data, int type, Ecore_Con_Event_Client_Write *ev)
{
    HttpServer *tcpserver = reinterpret_cast<HttpServer *>(data);

    if (ev && (tcpserver != ecore_con_server_data_get(ecore_con_client_server_get(ev->client))))
    {
        return ECORE_CALLBACK_PASS_ON;
    }

    if (tcpserver)
    {
        tcpserver->dataWritten(ev->client, ev->size);
    }
    else
    {
        cCriticalDom("network") << "failed to get HttpServer object !";
    }

    return ECORE_CALLBACK_RENEW;
}
예제 #12
0
파일: enfeeble.c 프로젝트: zmike/enfeeble
static Eina_Bool
data(Enfeeble *enf, int type __UNUSED__, Ecore_Con_Event_Server_Data *ev)
{
   char *recv;

   if ((enf != ecore_con_server_data_get(ev->server)) || (!enf))
     return ECORE_CALLBACK_PASS_ON;

   if (ev->size == 1)
     {
        DBG("Received carriage return");
        return ECORE_CALLBACK_RENEW;
     }
   recv = alloca(ev->size + 1);
   memcpy(recv, ev->data, ev->size);
   recv[ev->size] = 0;
   DBG("Receiving %i bytes:\n%s", ev->size, recv);

   if (!enfeeble_data_detect(enf, ev))
     return ECORE_CALLBACK_RENEW;

   return ECORE_CALLBACK_RENEW;
}
예제 #13
0
Eina_Bool
data_smtp(Email *e, int type __UNUSED__, Ecore_Con_Event_Server_Data *ev)
{
   char *recv;

   if (e != ecore_con_server_data_get(ev->server))
     {
        DBG("Event mismatch");
        return ECORE_CALLBACK_PASS_ON;
     }

   recv = alloca(ev->size + 1);
   memcpy(recv, ev->data, ev->size);
   recv[ev->size] = 0;
   DBG("Receiving %i bytes:\n%s", ev->size, recv);

   if (e->state < EMAIL_STATE_CONNECTED)
     {
        email_login_smtp(e, ev);
        return ECORE_CALLBACK_RENEW;
     }

   return ECORE_CALLBACK_RENEW;
}
예제 #14
0
파일: smtp_handlers.c 프로젝트: Limsik/e17
Eina_Bool
data_smtp(Email *e, int type __UNUSED__, Ecore_Con_Event_Server_Data *ev)
{
   char *recv;
   Email_Send_Cb cb;
   Email_Cb qcb;

   if (e != ecore_con_server_data_get(ev->server))
     {
        DBG("Event mismatch");
        return ECORE_CALLBACK_PASS_ON;
     }

   if (eina_log_domain_level_check(email_log_dom, EINA_LOG_LEVEL_DBG))
     {
        recv = alloca(ev->size + 1);
        memcpy(recv, ev->data, ev->size);
        recv[ev->size] = 0;
        DBG("Receiving %i bytes:\n%s", ev->size, recv);
     }

   if (e->state < EMAIL_STATE_CONNECTED)
     {
        email_login_smtp(e, ev);
        return ECORE_CALLBACK_RENEW;
     }
   if (!e->current) return ECORE_CALLBACK_RENEW;

   cb = eina_list_data_get(e->cbs);
   qcb = eina_list_data_get(e->cbs);
   if (e->current == EMAIL_OP_QUIT)
     {
        if ((ev->size < 3) || (memcmp(ev->data, "221", 3)))
          ERR("Could not QUIT properly!");
        if (qcb) qcb(e);
        ecore_con_server_del(e->svr);
        return ECORE_CALLBACK_RENEW;
     }
   switch (e->smtp_state)
     {
      case EMAIL_SMTP_STATE_BODY:
        if ((ev->size < 3) || (memcmp(ev->data, "354", 3)))
          {
             if (cb) cb(e->op_ids->data, EINA_FALSE);
             next_smtp(e);
             return ECORE_CALLBACK_RENEW;
          }
        if (!send_smtp(e))
          {
             if (cb) cb(e->op_ids->data, EINA_FALSE);
             next_smtp(e);
          }
        break;
      default:
        if ((ev->size < 3) || (memcmp(ev->data, "250", 3)))
          {
             if (cb) cb(e->op_ids->data, EINA_FALSE);
             next_smtp(e);
          }
        else if (e->smtp_state > EMAIL_SMTP_STATE_BODY)
          {
             if (cb) cb(e->op_ids->data, EINA_TRUE);
             next_smtp(e);
          }
        else
          {
             if (!send_smtp(e))
               {
                  if (cb) cb(e->op_ids->data, EINA_FALSE);
                  next_smtp(e);
               }
          }
     }

   return ECORE_CALLBACK_RENEW;
}
예제 #15
0
파일: shotgun.c 프로젝트: Limsik/e17
static Eina_Bool
data(Shotgun_Auth *auth, int type __UNUSED__, Ecore_Con_Event_Server_Data *ev)
{
   char *recv, *data, *p;
   size_t size;

   if ((auth != ecore_con_server_data_get(ev->server)) || (!auth))
     return ECORE_CALLBACK_PASS_ON;

   ecore_timer_reset(auth->keepalive);
   if (ev->size == 1)
     {
        DBG("Received carriage return");
        return ECORE_CALLBACK_RENEW;
     }
   else if ((ev->size == 38) &&
            (!memcmp(ev->data, "<?xml version=\"1.0", sizeof("<?xml version=\"1.0") - 1)) &&
            (((unsigned char*)ev->data)[ev->size - 1] == '>'))
     {
        DBG("Received xml version tag");
        return ECORE_CALLBACK_RENEW;
     }
   if (eina_log_domain_level_check(shotgun_log_dom, EINA_LOG_LEVEL_DBG))
     {
        recv = alloca(ev->size + 1);
        memcpy(recv, ev->data, ev->size);
        for (p = recv + ev->size - 1; isspace(*p); p--)
          *p = 0;
        recv[ev->size] = 0;
        DBG("Receiving %i bytes:\n%s", ev->size, recv);
     }

   if (!shotgun_data_detect(auth, ev))
     return ECORE_CALLBACK_RENEW;

   if (auth->state < SHOTGUN_CONNECTION_STATE_CONNECTED)
     {
        shotgun_login(auth, ev);
        return ECORE_CALLBACK_RENEW;
     }

   data = auth->buf ? (char*)eina_strbuf_string_get(auth->buf) : (char*)ev->data;
   size = auth->buf ? eina_strbuf_length_get(auth->buf) : (size_t)ev->size;

   switch (shotgun_data_tokenize(auth, ev))
     {
      case SHOTGUN_DATA_TYPE_MSG:
        shotgun_message_feed(auth, data, size);
        break;
      case SHOTGUN_DATA_TYPE_IQ:
        shotgun_iq_feed(auth, data, size);
        break;
      case SHOTGUN_DATA_TYPE_PRES:
        shotgun_presence_feed(auth, data, size);
        break;
      default:
        ERR("UNPARSABLE TAG %d", shotgun_data_tokenize(auth, ev));
        break;
     }
   if (auth->buf) eina_strbuf_free(auth->buf);
   auth->buf = NULL;

   return ECORE_CALLBACK_RENEW;
}
예제 #16
0
Eina_Bool
data_pop(Email *e, int type __UNUSED__, Ecore_Con_Event_Server_Data *ev)
{
   char *recv;

   if (e != ecore_con_server_data_get(ev->server))
     {
        DBG("Event mismatch");
        return ECORE_CALLBACK_PASS_ON;
     }

   recv = alloca(ev->size + 1);
   memcpy(recv, ev->data, ev->size);
   recv[ev->size] = 0;
   DBG("Receiving %i bytes:\n%s", ev->size, recv);

   if (e->state < EMAIL_STATE_CONNECTED)
     {
        email_login_pop(e, ev);
        return ECORE_CALLBACK_RENEW;
     }

   if (!e->current) return ECORE_CALLBACK_RENEW;

   switch (e->current)
     {
      case EMAIL_OP_STAT:
        if (!email_pop3_stat_read(e, recv, ev->size)) return ECORE_CALLBACK_RENEW;
        break;
      case EMAIL_OP_LIST:
        if (!email_pop3_list_read(e, ev)) return ECORE_CALLBACK_RENEW;
        break;
      case EMAIL_OP_RETR:
        if (!email_pop3_retr_read(e, ev)) return ECORE_CALLBACK_RENEW;
        break;
      case EMAIL_OP_DELE:
      case EMAIL_OP_QUIT:
      {
         Ecore_Cb cb;

         cb = e->cbs->data;
         e->cbs = eina_list_remove_list(e->cbs, e->cbs);
         if (!email_op_ok(ev->data, ev->size))
           {
              if (e->current == EMAIL_OP_DELE) ERR("Error with DELE");
              else ERR("Error with QUIT");
           }
         else
           {
              if (e->current == EMAIL_OP_DELE) INF("DELE successful");
              else INF("QUIT");
           }
         if (cb) cb(e);
         if (e->current == EMAIL_OP_QUIT) ecore_con_server_del(e->svr);
         break;
      }
      default:
        break;
     }
   next_pop(e);
   return ECORE_CALLBACK_RENEW;
}