Files
linguist/samples/OpenEdge ABL/SocketReader.p
2012-07-23 15:52:49 -05:00

119 lines
3.8 KiB
OpenEdge ABL

/*------------------------------------------------------------------------
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.