HRESULT InternetTransport_DoCommand(InternetTransport *This, LPCSTR pszCommand, INETXPORT_COMPLETION_FUNCTION fnCompletion) { if (This->Status == IXP_DISCONNECTED) return IXP_E_NOT_CONNECTED; if (This->fnCompletion) return IXP_E_BUSY; if (This->pCallback && This->fCommandLogging) { ITransportCallback_OnCommand(This->pCallback, CMD_SEND, (LPSTR)pszCommand, 0, (IInternetTransport *)&This->u.vtbl); } return InternetTransport_Write(This, pszCommand, strlen(pszCommand), fnCompletion); }
static HRESULT SMTPTransport_ParseResponse(SMTPTransport *This, char *pszResponse, SMTPRESPONSE *pResponse) { HRESULT hrServerError; TRACE("response: %s\n", debugstr_a(pszResponse)); if (!isdigit(*pszResponse)) return IXP_E_SMTP_RESPONSE_ERROR; pResponse->pTransport = (ISMTPTransport *)&This->InetTransport.u.vtblSMTP2; pResponse->rIxpResult.pszResponse = pszResponse; pResponse->rIxpResult.dwSocketError = 0; pResponse->rIxpResult.uiServerError = strtol(pszResponse, &pszResponse, 10); if (*pszResponse == '-') { pResponse->fDone = FALSE; pszResponse++; } else pResponse->fDone = TRUE; switch (pResponse->rIxpResult.uiServerError) { case 211: hrServerError = IXP_E_SMTP_211_SYSTEM_STATUS; break; case 214: hrServerError = IXP_E_SMTP_214_HELP_MESSAGE; break; case 220: hrServerError = IXP_E_SMTP_220_READY; break; case 221: hrServerError = IXP_E_SMTP_221_CLOSING; break; case 245: hrServerError = IXP_E_SMTP_245_AUTH_SUCCESS; break; case 250: hrServerError = IXP_E_SMTP_250_MAIL_ACTION_OKAY; break; case 251: hrServerError = IXP_E_SMTP_251_FORWARDING_MAIL; break; case 334: hrServerError = IXP_E_SMTP_334_AUTH_READY_RESPONSE; break; case 354: hrServerError = IXP_E_SMTP_354_START_MAIL_INPUT; break; case 421: hrServerError = IXP_E_SMTP_421_NOT_AVAILABLE; break; case 450: hrServerError = IXP_E_SMTP_450_MAILBOX_BUSY; break; case 451: hrServerError = IXP_E_SMTP_451_ERROR_PROCESSING; break; case 452: hrServerError = IXP_E_SMTP_452_NO_SYSTEM_STORAGE; break; case 454: hrServerError = IXP_E_SMTP_454_STARTTLS_FAILED; break; case 500: hrServerError = IXP_E_SMTP_500_SYNTAX_ERROR; break; case 501: hrServerError = IXP_E_SMTP_501_PARAM_SYNTAX; break; case 502: hrServerError = IXP_E_SMTP_502_COMMAND_NOTIMPL; break; case 503: hrServerError = IXP_E_SMTP_503_COMMAND_SEQ; break; case 504: hrServerError = IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL; break; case 530: hrServerError = IXP_E_SMTP_530_STARTTLS_REQUIRED; break; case 550: hrServerError = IXP_E_SMTP_550_MAILBOX_NOT_FOUND; break; case 551: hrServerError = IXP_E_SMTP_551_USER_NOT_LOCAL; break; case 552: hrServerError = IXP_E_SMTP_552_STORAGE_OVERFLOW; break; case 553: hrServerError = IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX; break; case 554: hrServerError = IXP_E_SMTP_554_TRANSACT_FAILED; break; default: hrServerError = IXP_E_SMTP_RESPONSE_ERROR; break; } pResponse->rIxpResult.hrResult = hrServerError; pResponse->rIxpResult.hrServerError = hrServerError; if (This->InetTransport.pCallback && This->InetTransport.fCommandLogging) { ITransportCallback_OnCommand(This->InetTransport.pCallback, CMD_RESP, pResponse->rIxpResult.pszResponse, hrServerError, (IInternetTransport *)&This->InetTransport.u.vtbl); } return S_OK; }