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; }
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; }