亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? idpop3server.pas

?? delphi indy9.0.18組件包
?? PAS
字號:
{ $HDR$}
{**********************************************************************}
{ Unit archived using Team Coherence                                   }
{ Team Coherence is Copyright 2002 by Quality Software Components      }
{                                                                      }
{ For further information / comments, visit our WEB site at            }
{ http://www.TeamCoherence.com                                         }
{**********************************************************************}
{}
{ $Log:  10279: IdPOP3Server.pas 
{
    Rev 1.1    2/19/2003 5:59:48 PM  BGooijen
  Now an error is returned when the parameters of APOP and TOP are wrong. 
  before the change the connection was closed on such error.
}
{
{   Rev 1.0    2002.11.12 10:48:00 PM  czhower
}
unit IdPOP3Server;

interface

{
 Indy POP3 Server

 Original Programmer: Luke Croteau
 Current Maintainer:  Andrew Neillans
 No Copyright. Code is given to the Indy Pit Crew.

 Quick Notes:
    A few of the methods return a default message number if a number isn't entered.
    The LIST, DELE, RETR, UIDL, and TOP command will return a -1 in the parameters
    if the value isn't specified by the client.
    Some functions require this capability. For example, the LIST command can operate
    either by a certain message number or a with no arguments. See RFC1939 for details.

 Revision History:
 02-May-2002: Andy Neillans
    - Bug Fix 551116 - StrToIntDef needed 'trimming#
 30-Apr-2002: Allen O'Neill.
    - Failsafe .. added check for ParamCount in reading Username and password - previously
      if either were sent in blank we got an IndexOutOfBounds error.
 13-Apr-2002:
   - Corrections :) And some Greeting.Text / And other response, glitches
 3-Apr-2002:
   - Minor changes. (Greeting.Text)
 1-Apr-2002:
   - Completed rewrite! At Last!
 15-Feb-2002: Andy
   - Started rewrite for use of CommandHandlers
 13-Jan-2002:
    -Fixed formatting bug.
 26-Dec-2000:
    -Andrew Neillans found a bug on line 157. Originally it was
     If Assigned(OnCommandLIST) then OnCommandRETR(...).
     Changed to OnCommandLIST(...). Thanks Andrew!
 29-Oct-2000:
    -I discovered I really shouldn't program at night.
     The error wasn't that it shouldn't be Succ (Because it should), but
     because I forgot to implement LIST
 27-Oct-2000:
    -Fixed a dumb bug. Originally coded command parsing as Succ(PosInStrArray)
     Should be just PosInStrArray b/c it is not a dynamic array. The bounds
     are constant.
 25-Oct-2000:
    -Created Unit.
    -Created new IdPOP3Server Server Component according to RFC 1939
}

uses
  Classes,
  IdAssignedNumbers,
  IdGlobal,
  IdTCPServer,
  IdMailBox;


type

  TIdPOP3ServerState = (Auth, Trans, Update);

  TIdPOP3ServerThread = class(TIdPeerThread)
  protected
    // what needs to be stored...
    fUser : String;
    fPassword : String;
    fState :TIdPOP3ServerState;
    procedure BeforeRun; override;
  public
    constructor Create(ACreateSuspended: Boolean = True); override;
    destructor Destroy; override;
   // Any functions for vars
    property Username : String read fUser write fUser;
    property Password : String read fPassword write fPassword;    
    property State    : TIdPOP3ServerState read fState write fState;
  end;

  TIdPOP3ServerNoParamEvent = procedure (ASender: TIdCommand) of object;
  TIdPOP3ServerMessageNumberEvent = procedure (ASender: TIdCommand; AMessageNum :Integer) of object;

  TIdPOP3ServerLogin = procedure (AThread :TIdPeerThread; LThread : TIdPOP3ServerThread) of object;

  TIdPOP3ServerAPOPCommandEvent = procedure (ASender: TIdCommand; AMailboxID :String; ADigest :String) of object;
  TIdPOP3ServerTOPCommandEvent = procedure (ASender: TIdCommand; AMessageNum :Integer; ANumLines :Integer) of object;


  TIdPOP3Server = class(TIdTcpServer)
  protected
    fCommandLogin : TIdPOP3ServerLogin;
    fCommandList,
    fCommandRetr,
    fCommandDele,
    fCommandUIDL  : TIdPOP3ServerMessageNumberEvent;
    fCommandTop   : TIdPOP3ServerTOPCommandEvent;
    fCommandQuit,
    fCommandStat,
    fCommandRset  : TIdPOP3ServerNoParamEvent;
    fCommandAPOP  : TIdPOP3ServerAPOPCommandEvent;

    // CommandHandlers
    procedure CommandUser(ASender: TIdCommand); //
    procedure CommandPass(ASender: TIdCommand); //
    procedure CommandList(ASender: TIdCommand); //
    procedure CommandRetr(ASender: TIdCommand); //
    procedure CommandDele(ASender: TIdCommand); //
    procedure CommandQuit(ASender: TIdCommand); //
    procedure CommandAPOP(ASender: TIdCommand); //
    procedure CommandStat(ASender: TIdCommand); //
    procedure CommandRset(ASender: TIdCommand); //
    procedure CommandTop(ASender: TIdCommand);  //
    procedure CommandUIDL(ASender: TIdCommand); //

    procedure InitializeCommandHandlers; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property DefaultPort default IdPORT_POP3;
    // These procedures / functions are exposed
    property CheckUser   : TIdPOP3ServerLogin              read fCommandLogin write fCommandLogin;
    property OnLIST      : TIdPOP3ServerMessageNumberEvent read fCommandList write fCommandList;
    property OnRETR      : TIdPOP3ServerMessageNumberEvent read fCommandRetr write fCommandRetr;
    property OnDELE      : TIdPOP3ServerMessageNumberEvent read fCommandDele write fCommandDele;
    property OnUIDL      : TIdPOP3ServerMessageNumberEvent read fCommandUidl write fCommandUidl;
    property OnSTAT      : TIdPOP3ServerNoParamEvent       read fCommandStat write fCommandStat;
    property OnTOP       : TIdPOP3ServerTOPCommandEvent    read fCommandTop  write fCommandTop;
    property OnRSET      : TIdPOP3ServerNoParamEvent       read fCommandRset write fCommandRset;
    property OnQUIT      : TIdPOP3ServerNoParamEvent       read fCommandQuit write fCommandQuit;
    property OnAPOP      : TIdPOP3ServerAPOPCommandEvent   read fCommandApop write fCommandApop;
  End;

implementation

uses
  IdResourceStrings,
  IdRFCReply,
  SysUtils;

procedure TIdPOP3Server.InitializeCommandHandlers;
begin
  inherited;
  with CommandHandlers.Add do begin
    Command := 'USER';
    OnCommand := CommandUSER;
    ParseParams := True;
  end;
  with CommandHandlers.Add do begin
    Command := 'PASS';
    OnCommand := CommandPass;
    ParseParams := True;
  end;
  with CommandHandlers.Add do begin
    Command := 'LIST';
    OnCommand := CommandList;
    ParseParams := True;
  end;
  with CommandHandlers.Add do begin
    Command := 'RETR';
    OnCommand := CommandRetr;
    ParseParams := True;
  end;
  with CommandHandlers.Add do begin
    Command := 'DELE';
    OnCommand := CommandDele;
    ParseParams := True;
  end;
  with CommandHandlers.Add do begin
    Command := 'UIDL';
    OnCommand := CommandUIDL;
    ParseParams := True;
  end;
  with CommandHandlers.Add do begin
    Command := 'STAT';
    OnCommand := CommandSTAT;
    ParseParams := False;
  end;
  with CommandHandlers.Add do begin
    Command := 'TOP';
    OnCommand := CommandTOP;
    ParseParams := True;
  end;
  with CommandHandlers.Add do begin
    Command := 'NOOP';
    ReplyNormal.Text.Text := '+OK NOOP';
    ParseParams := False;
  end;
  with CommandHandlers.Add do begin
    Command := 'APOP';
    OnCommand := CommandAPOP;
    ParseParams := True;
  End;
  with CommandHandlers.Add do begin
    Command := 'RSET';
    ReplyNormal.Text.Text := '+OK Reset';
    OnCommand := CommandRset;
    ParseParams := False;
  end;

  with CommandHandlers.Add do begin
    Command := 'QUIT';
    OnCommand := CommandQuit;
    Disconnect := True;
    ReplyNormal.Text.Text := '+OK Closing communication channel'; // USE ResourceString ??
    ParseParams := False;
  end;
end;

{ Command Handler Functions here }

procedure TIdPOP3Server.CommandUser(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  if ASender.Params.Count > 0 then
      LThread.Username := ASender.Params.Strings[0];
  ASender.Thread.Connection.WriteLn('+OK Password required');
end;

procedure TIdPOP3Server.CommandPass(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  if ASender.Params.Count > 0 then
      LThread.Password := ASender.Params.Strings[0];
  if Assigned(CheckUser) then 
    CheckUser(ASender.Thread, LThread);
  // User to set return state of LThread.State as required.

  If LThread.State <> Trans Then
   ASender.Thread.Connection.Writeln('-ERR Login failed')
  Else
   ASender.Thread.Connection.Writeln('+OK Login OK');
end;

procedure TIdPOP3Server.CommandList(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then
   Begin
    If Assigned(fCommandList) Then
     OnList(ASender, StrToIntDef(Trim(ASender.Params.Text), -1))
    Else
     ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['LIST']));
   End
  Else
   ASender.Thread.Connection.WriteLn('-ERR Please login first'); // RS
end;

procedure TIdPOP3Server.CommandRetr(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then
   Begin
    If Assigned(fCommandRetr) Then
     OnRetr(ASender, StrToIntDef(Trim(ASender.Params.Text), -1))
    Else
   ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['RETR']));
   End
  Else
   ASender.Thread.Connection.WriteLn('-ERR Please login first'); // RS
end;

procedure TIdPOP3Server.CommandDele(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then
   Begin
    If Assigned(fCommandDele) Then
    Begin
     Try
      StrToInt(Trim(ASender.Params.Text));
      OnDele(ASender, StrToInt(Trim(ASender.Params.Text)))
     Except
      ASender.Thread.Connection.WriteLn('-ERR Invalid Message Number'); // RS
     End;
    End
    Else
   ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['DELE']));
   End
  Else
   ASender.Thread.Connection.WriteLn('-ERR Please login first'); // RS
end;

procedure TIdPOP3Server.CommandQuit(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then
   Begin
    If Assigned(fCommandQuit) Then OnQuit(ASender)
   End;
end;

procedure TIdPOP3Server.CommandAPOP(ASender: TIdCommand);
Var
 LThread: TIdPOP3ServerThread;
begin
 LThread := TIdPOP3ServerThread(ASender.Thread);
 If LThread.State = Auth Then
  Begin
   If Assigned(fCommandAPOP) Then
    Begin
      if ASender.Params.Count = 2 then begin
        OnAPOP(ASender, ASender.Params.Strings[0], ASender.Params.Strings[1]);
        // User to set return state of LThread.State as required.
        If LThread.State <> Trans Then begin
          ASender.Thread.Connection.Writeln('-ERR Login failed');
        End
      end else begin
        ASender.Thread.Connection.WriteLn('-ERR Invalid Syntax'); //RS
      end
     end
   Else
    ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['APOP']));
  End
 Else
  ASender.Thread.Connection.WriteLn('-ERR Wrong State');
end;

procedure TIdPOP3Server.CommandStat(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then
   Begin
    If Assigned(fCommandStat) Then
     OnStat(ASender)
    Else
   ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['STAT']));
   End
  Else
   ASender.Thread.Connection.WriteLn('-ERR Please login first'); // RS
end;

procedure TIdPOP3Server.CommandRset(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then
   Begin
    If Assigned(fCommandRSET) Then
     OnRset(ASender)
    Else
   ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['RSET']));
   End
  Else
   ASender.Thread.Connection.WriteLn('-ERR Please login first'); // RS
end;

procedure TIdPOP3Server.CommandTop(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then Begin
    If Assigned(fCommandTop) Then Begin
      if ASender.Params.Count = 2 then begin
        If (StrToIntDef(Trim(ASender.Params.Strings[0]), -1) <> -1) AND (StrToIntDef(Trim(ASender.Params.Strings[1]), -1) <> -1) Then begin
          OnTop(ASender, StrToInt(ASender.Params.Strings[0]), StrToInt(ASender.Params.Strings[1]))
        end Else begin
          ASender.Thread.Connection.WriteLn('-ERR Invalid Syntax'); //RS
        End;
      end else begin
        ASender.Thread.Connection.WriteLn('-ERR Invalid Syntax'); //RS
      end
    End Else
     ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['TOP']));
  End
  Else
   ASender.Thread.Connection.WriteLn('-ERR Please login first'); // RS
end;

procedure TIdPOP3Server.CommandUIDL(ASender: TIdCommand);
Var
  LThread: TIdPOP3ServerThread;
begin
  LThread := TIdPOP3ServerThread(ASender.Thread);
  If LThread.State = Trans Then
   Begin
    If Assigned(fCommandUidl) Then
     OnUidl(ASender, StrToIntDef(Trim(ASender.Params.Text), -1))
    Else
   ASender.Thread.Connection.WriteLn('-ERR ' + Format(RSPOP3SVRNotHandled, ['UIDL']));
   End
  Else
   ASender.Thread.Connection.WriteLn('-ERR Please login first'); // RS
end;

{ Constructor / Destructors }

constructor TIdPOP3Server.Create(AOwner: TComponent);
begin
  inherited;
  ThreadClass := TIdPOP3ServerThread;
  DefaultPort := IdPORT_POP3;
  Greeting.Text.Text := '+OK Welcome to Indy POP3 Server'; // RS
  ReplyUnknownCommand.Text.Text := '-ERR Sorry, Unknown Command'; // RS
end;

destructor TIdPOP3Server.Destroy;
begin
  inherited;
end;

{ TIdPOP3ServerThread }

constructor TIdPOP3ServerThread.Create(ACreateSuspended: Boolean);
begin
  inherited;
  FUser := '';
  fState := Auth;
end;

procedure TIdPOP3ServerThread.BeforeRun;
begin
  FUser := '';
  fState := Auth;
  fPassword := '';
  inherited BeforeRun;
end;

destructor TIdPOP3ServerThread.Destroy;
begin
  inherited;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲黄色录像片| 福利一区二区在线观看| 国产精品中文字幕一区二区三区| 不卡av免费在线观看| 日韩一级视频免费观看在线| 亚洲精品国产一区二区精华液 | 久久精品这里都是精品| 亚洲人成精品久久久久久| 韩国一区二区三区| 欧美久久久久久久久久| 国产精品久久看| 国产自产高清不卡| 欧美精品在线观看一区二区| 国产精品久久久久久久久晋中| 午夜激情一区二区三区| 在线免费观看视频一区| 国产精品入口麻豆九色| 国产一区二区精品久久91| 欧美一区二区在线免费播放| 一区二区三区日本| 99麻豆久久久国产精品免费| 国产亚洲一区二区在线观看| 老司机精品视频在线| 欧美一区二区精美| 午夜精品久久久久久久| 在线视频中文字幕一区二区| 亚洲精选视频免费看| av影院午夜一区| 国产精品成人午夜| jiyouzz国产精品久久| 国产精品色呦呦| 99精品桃花视频在线观看| 国产三级一区二区| 国产不卡视频一区| 国产精品嫩草久久久久| 成人综合日日夜夜| 亚洲欧洲日韩综合一区二区| 99国产精品久久久久久久久久 | 国产成人在线视频网站| 精品福利在线导航| 国产九色sp调教91| 欧美激情一区二区三区| 成人av电影免费观看| 亚洲人吸女人奶水| 色琪琪一区二区三区亚洲区| 一区二区高清在线| 欧美日韩aaa| 久久精品国产澳门| 国产三级一区二区三区| aaa欧美日韩| 亚洲午夜免费电影| 欧美一区二区三区影视| 激情五月激情综合网| 久久精品无码一区二区三区| 高清视频一区二区| 亚洲黄色片在线观看| 在线不卡免费欧美| 国产精品中文字幕日韩精品| 日本一区二区三区dvd视频在线| 成人美女视频在线观看| 亚洲综合图片区| 日韩一区二区在线观看| 国产成人午夜99999| 亚洲人亚洲人成电影网站色| 欧美日韩免费一区二区三区| 免费观看一级特黄欧美大片| 国产日韩欧美高清| 欧美在线观看视频一区二区三区| 日本不卡一二三| 国产欧美日韩精品一区| 在线精品视频免费观看| 美美哒免费高清在线观看视频一区二区| 亚洲精品一区二区在线观看| 色综合久久久久久久久久久| 人人超碰91尤物精品国产| 国产精品久久久久9999吃药| 欧美日韩三级一区二区| 风间由美一区二区三区在线观看 | 91亚洲永久精品| 免费看精品久久片| 亚洲精品乱码久久久久久久久 | 欧洲av在线精品| 韩国女主播一区| 亚洲靠逼com| 久久综合狠狠综合| 欧美日韩在线免费视频| 顶级嫩模精品视频在线看| 午夜精品福利视频网站| 成人欧美一区二区三区小说| 精品捆绑美女sm三区| 日本道色综合久久| 成人高清视频在线| 狠狠色狠狠色综合系列| 丝袜美腿成人在线| 一区二区三区在线观看动漫| 欧美激情在线一区二区三区| 日韩亚洲国产中文字幕欧美| 一本久道中文字幕精品亚洲嫩| 国产精品一区二区久激情瑜伽| 日本美女一区二区| 午夜精品久久久久久久| 一区二区三区免费看视频| 中文字幕av资源一区| 26uuu国产一区二区三区| 欧美一级黄色片| 欧美久久婷婷综合色| 日本乱人伦aⅴ精品| 国产成人av一区二区三区在线观看| 亚洲乱码国产乱码精品精可以看 | 亚洲私人黄色宅男| 久久日韩粉嫩一区二区三区| 欧美疯狂性受xxxxx喷水图片| 色诱亚洲精品久久久久久| 成人av第一页| 不卡影院免费观看| av资源站一区| 99精品久久久久久| 色哟哟一区二区| 色婷婷av一区二区三区之一色屋| 成人av网站在线观看| 不卡av电影在线播放| 成人动漫视频在线| 91一区二区在线| 欧美三级中文字幕在线观看| 欧洲精品一区二区| 欧美精品久久久久久久久老牛影院| 欧美日韩中文另类| 在线不卡一区二区| 精品成人一区二区三区| 精品国产精品网麻豆系列| 久久久久久免费| 中文字幕在线不卡一区| 一区二区三区中文在线| 午夜激情久久久| 国内精品久久久久影院薰衣草 | 欧美日韩国产一级二级| 欧美一区二区三区视频在线| 日韩欧美国产精品一区| 国产午夜久久久久| 亚洲精品久久久蜜桃| 婷婷开心激情综合| 国产一区二区在线观看免费| 国产成人免费网站| 色久综合一二码| 欧美一二三四区在线| 国产日韩欧美综合在线| 亚洲色图另类专区| 日产国产高清一区二区三区| 国产精品一品视频| 日本丶国产丶欧美色综合| 欧美一级黄色大片| 亚洲欧美一区二区在线观看| 亚洲国产成人av网| 国产在线精品一区在线观看麻豆| 国产福利精品导航| 欧美日韩国产成人在线91| 久久久不卡网国产精品二区| 亚洲日本一区二区| 国内精品国产成人| 欧美在线观看视频一区二区三区| 久久免费看少妇高潮| 艳妇臀荡乳欲伦亚洲一区| 国产一区二区三区免费观看| 日本国产一区二区| 久久女同精品一区二区| 亚洲成年人影院| 成人av免费在线| 日韩欧美国产高清| 亚洲国产日韩精品| 成人激情图片网| 日韩限制级电影在线观看| 亚洲精品中文在线| 国产精品1024久久| 欧美一级欧美三级在线观看| 中文字幕一区二区三区乱码在线| 麻豆精品新av中文字幕| 欧美一a一片一级一片| 国产精品久久久久精k8 | 久久一区二区三区四区| 亚洲h精品动漫在线观看| www.成人网.com| 国产亚洲综合在线| 九九视频精品免费| 56国语精品自产拍在线观看| 亚洲综合999| 91亚洲精品久久久蜜桃网站 | 国产精品久久久久久久久果冻传媒 | 日韩欧美一区二区在线视频| 一区二区三区精品| aaa欧美日韩| 国产精品久久久久久久久久久免费看 | 亚洲va在线va天堂| 色欧美乱欧美15图片| 国产精品乱人伦一区二区| 九九精品视频在线看| 91麻豆精品国产自产在线观看一区 | 日韩一区二区在线看片| 免费欧美日韩国产三级电影| 欧美日本在线视频| 日本欧洲一区二区|