diff options
Diffstat (limited to 'samples/OpenEdge ABL/SocketReader.p')
| -rw-r--r-- | samples/OpenEdge ABL/SocketReader.p | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/samples/OpenEdge ABL/SocketReader.p b/samples/OpenEdge ABL/SocketReader.p new file mode 100644 index 0000000..0f7add8 --- /dev/null +++ b/samples/OpenEdge ABL/SocketReader.p @@ -0,0 +1,118 @@ + +/*------------------------------------------------------------------------ + File : SocketReader.p + Purpose : + Author(s) : Abe Voelker + Created : Sat Aug 21 08:31:38 CDT 2010 + Notes : Based on code from smtpmail.p + ----------------------------------------------------------------------*/ + +/* *************************** Definitions ************************** */ +DEFINE INPUT PARAMETER objSendEmailAlg AS email.SendEmailSocket NO-UNDO. +DEFINE VARIABLE vbuffer AS MEMPTR NO-UNDO. +DEFINE VARIABLE vstatus AS LOGICAL NO-UNDO. +DEFINE VARIABLE vState AS INTEGER NO-UNDO. + + +ASSIGN vstate = 1. + +/* ******************** Preprocessor Definitions ******************** */ + + +/* *************************** Main Block *************************** */ + +FUNCTION getHostname RETURNS CHARACTER(): + DEFINE VARIABLE cHostname AS CHARACTER NO-UNDO. + INPUT THROUGH hostname NO-ECHO. + IMPORT UNFORMATTED cHostname. + INPUT CLOSE. + RETURN cHostname. +END FUNCTION. + +/* + Status: + 0 - No Connection to the server + 1 - Waiting for 220 connection to SMTP server + 2 - Waiting for 250 OK status to start sending email + 3 - Waiting for 250 OK status for sender + 4 - Waiting for 250 OK status for recipient + 5 - Waiting for 354 OK status to send data + 6 - Waiting for 250 OK status for message received + 7 - Quiting +*/ + +PROCEDURE newState: + DEFINE INPUT PARAMETER newState AS INTEGER. + DEFINE INPUT PARAMETER pstring AS CHARACTER. + vState = newState. + IF pstring = "" THEN + RETURN. + SET-SIZE(vbuffer) = LENGTH(pstring) + 1. + PUT-STRING(vbuffer,1) = pstring. + SELF:WRITE(vbuffer, 1, LENGTH(pstring)). + SET-SIZE(vbuffer) = 0. +END PROCEDURE. + +PROCEDURE ReadSocketResponse: + DEFINE VARIABLE vlength AS INTEGER NO-UNDO. + DEFINE VARIABLE str AS CHARACTER NO-UNDO. + DEFINE VARIABLE v AS INTEGER NO-UNDO. + + MESSAGE SELF:GET-BYTES-AVAILABLE() VIEW-AS ALERT-BOX. + vlength = SELF:GET-BYTES-AVAILABLE(). + IF vlength > 0 THEN DO: + SET-SIZE(vbuffer) = vlength + 1. + SELF:READ(vbuffer, 1, vlength, 1). + str = GET-STRING(vbuffer,1). + SET-SIZE(vbuffer) = 0. + objSendEmailAlg:handleResponse(str). + /* + v = INTEGER(ENTRY(1, str," ")). + CASE vState: + WHEN 1 THEN + IF v = 220 THEN + RUN newState(2, "HELO " + getHostname() + "~r~n"). + ELSE + vState = -1. + WHEN 2 THEN + IF v = 250 THEN + RUN newState(3, "MAIL From: " + "hardcoded@gmail.com" + "~r~n"). + ELSE + vState = -1. + WHEN 3 THEN + IF v = 250 THEN + RUN newState(4, "RCPT TO: " + "hardcoded@gmail.com" + "~r~n"). + ELSE + vState = -1. + WHEN 4 THEN + IF v = 250 THEN + RUN newState(5, "DATA ~r~n"). + ELSE + vState = -1. + WHEN 5 THEN + IF v = 354 THEN + RUN newState(6, "From: " + "hardcoded@gmail.com" + "~r~n" + + "To: " + "hardcoded@gmail.com" + " ~r~n" + + "Subject: " + "Test Subject" + + " ~r~n~r~n" + + "Test Body" + "~r~n" + + ".~r~n"). + ELSE + vState = -1. + + WHEN 6 THEN + IF v = 250 THEN + RUN newState(7,"QUIT~r~n"). + ELSE + vState = -1. + END CASE. + */ + END. + /* + IF vState = 7 THEN + MESSAGE "Email has been accepted for delivery.". + IF vState < 0 THEN + MESSAGE "Email has been aborted". + */ +END PROCEDURE. + |
