Example #1
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;
}
Example #2
0
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;
}