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

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

?? idmessageclient.pas

?? delphi indy9.0.18組件包
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{ $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:  10253: IdMessageClient.pas 
{
{   Rev 1.13    7/23/04 6:11:26 PM  RLebeau
{ TFileStream access right tweak for ProcessMessage()
}
{
{   Rev 1.12    5/12/04 9:52:06 AM  RLebeau
{ Updated ProcessMessage() to call ReceiveBody() only if ReceiveHeader() does
{ not receive the message terminator first
}
{
{   Rev 1.11    5/2/04 7:58:08 PM  RLebeau
{ Updated TIdIOHandlerStreamMsg.Recv() to not use a local buffer anymore
}
{
{   Rev 1.10    5/1/04 3:04:16 AM  RLebeau
{ Bug fix for TIdIOHandlerStreamMsg, and also updated to keep track of the last
{ character received from the stream so that extra CR LF characters are not
{ added to the end of the message data unnecessarily.
}
{
{   Rev 1.9    4/23/04 1:54:22 PM  RLebeau
{ Added support for TIdIOHandlerStreamMsg class
}
{
{   Rev 1.8    2/3/04 11:59:20 AM  RLebeau
{ Updated SendBody() to output the TIdMessagePart.ContentID property if it is
{ assigned.
}
{
{   Rev 1.7    10/17/03 11:50:46 AM  RLebeau
{ Updated ReceiveBody() to copy all available header values from the message
{ decoder when creating TIdText and TIdAttachment instances rather than just
{ select values.
}
{
{   Rev 1.6    2003.07.03 11:52:08 AM  czhower
{ DeleteTempFiles addition.
{ Fix of old property IsTempFile, changed to DeleteTempFile so as not to change
{ broken but old functionality that could otherwise cause data loss.
}
{
{   Rev 1.5    2003.06.15 3:00:34 PM  czhower
{ -Fixed IdIOHandlerStream to function as originally designed and needed.
{ -Change ReadStream, WriteStream to Input/Output to be consistent with other
{ areas.
}
{
{   Rev 1.4    21/2/2003 1:53:10 PM  SGrobety
{ Fixed a problem when the message contained only a single text part
}
{
{   Rev 1.3    11-30-2002 11:49:50  BGooijen
{ Fixed double if keywork in if-statement, which caused to file not to compile
}
{
{   Rev 1.2    11/23/2002 03:23:08 AM  JPMugaas
{ Reverted back to old way because the fix turned out to be problematic.
}
{
{   Rev 1.1    11/19/2002 05:24:10 PM  JPMugaas
{ Fixed problem with a . starting a line causing a duplicate period where it
{ shouldn't.
}
{
{   Rev 1.0    2002.11.12 10:45:48 PM  czhower
}
unit IdMessageClient;

{
  2001-Oct-29 Don Siders
    Modified TIdMessageClient.SendMsg to use AHeadersOnly argument.

  2001-Dec-1  Don Siders
    Save ContentDisposition in TIdMessageClient.ProcessAttachment
}

interface

uses
  Classes,
  IdGlobal, IdIOHandlerStream, IdMessage, IdTCPClient, IdHeaderList;

type
  TIdIOHandlerStreamMsg = class(TIdIOHandlerStream)
  protected
    FTerminator: String;
    FTerminatorIndex: Integer;
    FLastCharRecv: Char;
  public
    constructor Create(AOwner: TComponent); override;
    function Readable(AMSec: integer = IdTimeoutDefault): boolean; override;
    function Recv(var ABuf; ALen: integer): integer; override;
  end;

  TIdMessageClient = class(TIdTCPClient)
  protected
    // The length of the folded line
    FMsgLineLength: integer;
    // The string to be pre-pended to the next line
    FMsgLineFold: string;
    //
    procedure ReceiveBody(AMsg: TIdMessage; const ADelim: string = '.'); virtual;
    function  ReceiveHeader(AMsg: TIdMessage; const AAltTerm: string = ''): string; virtual;
    procedure SendBody(AMsg: TIdMessage); virtual;
    procedure SendHeader(AMsg: TIdMessage); virtual;
    procedure WriteBodyText(AMsg: TIdMessage); virtual;
    procedure WriteFoldedLine(const ALine : string);
  public
    constructor Create(AOwner : TComponent); override;
    procedure ProcessMessage(AMsg: TIdMessage; AHeaderOnly: Boolean = False); overload;
    procedure ProcessMessage(AMsg: TIdMessage; const AStream: TStream; AHeaderOnly: Boolean = False); overload;
    procedure ProcessMessage(AMsg: TIdMessage; const AFilename: string; AHeaderOnly: Boolean = False); overload;
    procedure SendMsg(AMsg: TIdMessage; const AHeadersOnly: Boolean = False); virtual;
    //
    property MsgLineLength: integer read FMsgLineLength write FMsgLineLength;
    property MsgLineFold: string read FMsgLineFold write FMsgLineFold;
  end;

implementation

uses
  //TODO: Remove these references and make it completely pluggable. Check other spots in Indy as well
  IdCoderQuotedPrintable, IdMessageCoderMIME, IdMessageCoderUUE, IdMessageCoderXXE,
  //
  IdCoder, IdCoder3to4,
  IdCoderHeader, IdMessageCoder, IdComponent, IdException, IdResourceStrings, IdTCPConnection,
  IdTCPStream, IdIOHandler,
  SysUtils;

const
  SMsgTerminator = #13#10'.'#13#10; {do not localize}

function GetLongestLine(var ALine : String; ADelim : String) : String;
var
  i, fnd, lineLen, delimLen : Integer;
begin
  i := 0;
  fnd := -1;
  delimLen := length(ADelim);
  lineLen := length(ALine);

  while i < lineLen do
  begin
    if ALine[i] = ADelim[1] then
    begin
      if Copy(ALine, i, delimLen) = ADelim then
      begin
        fnd := i;
      end;
    end;
    Inc(i);
  end;

  if fnd = -1 then
  begin
    result := '';
  end

  else begin
    result := Copy(ALine, 1, fnd - 1);
    ALine := Copy(ALine, fnd + delimLen, lineLen);
  end;
end;

////////////////////////
// TIdIOHandlerStreamMsg
////////////////////////

constructor TIdIOHandlerStreamMsg.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FTerminator := SMsgTerminator;
  FTerminatorIndex := 0;
  FLastCharRecv := #0;
end;

function TIdIOHandlerStreamMsg.Readable(AMSec: integer = IdTimeoutDefault): boolean;
begin
  // if the terminator is not started yet, check the source data first...
  if FTerminatorIndex = 0 then begin
    Result := inherited Readable(AMSec);
    if Result then begin
      Exit;
    end;
  end;
  // check the terminator next...
  if InputStream <> nil then begin
    Result := (FTerminatorIndex <= Length(FTerminator));
  end else begin
    Result := False
  end;
end;

function TIdIOHandlerStreamMsg.Recv(var ABuf; ALen: integer): integer;
begin
  // if the terminator is not started yet, check the source data first...
  if FTerminatorIndex = 0 then begin
    Result := inherited Recv(ABuf, ALen);
    if Result > 0 then begin
      // save the last character received for later use, see below
      FLastCharRecv := PChar(@ABuf)[Result-1];
      Exit;
    end;
    if (ALen <= 0) then begin
      // buffer size not specified, just return now without starting the terminator yet...
      Exit;
    end;
    // determine whether the stream ended with a line
    // break, adding an extra CR and/or LF if needed...
    if (FLastCharRecv = LF) then begin
      // don't add an extra line break
      FTerminatorIndex := 3;
    end else if (FLastCharRecv = CR) then begin
      // add extra LF
      FTerminatorIndex := 2;
    end else begin
      // add extra CRLF
      FTerminatorIndex := 1;
    end;
  end;
  // return the appropriate piece of the terminator...
  ALen := Min(ALen, (Length(FTerminator)-FTerminatorIndex)+1);
  if ALen > 0 then begin
    Move(FTerminator[FTerminatorIndex], ABuf, ALen);
    Inc(FTerminatorIndex, ALen);
  end;
  Result := ALen;
end;

///////////////////
// TIdMessageClient
///////////////////

constructor TIdMessageClient.Create;
begin
  inherited;
  FMsgLineLength := 79;
  FMsgLineFold := TAB;
end;

procedure TIdMessageClient.WriteFoldedLine;
var
  ins, s, line, spare : String;
  msgLen, insLen : Word;
begin
  s := ALine;

  // To give an amount of thread-safety
  ins := FMsgLineFold;
  insLen := Length(ins);
  msgLen := FMsgLineLength;

  // Do first line
  if length(s) > FMsgLineLength then
  begin
    spare := Copy(s, 1, msgLen);
    line := GetLongestLine(spare, ' ');
    s := spare + Copy(s, msgLen + 1, length(s));
    WriteLn(line);

    // continue with the folded lines
    while length(s) > (msgLen - insLen) do
    begin
      spare := Copy(s, 1, (msgLen - insLen));
      line := GetLongestLine(spare, ' ');
      s := ins + spare + Copy(s, (msgLen - insLen) + 1, length(s));
      WriteLn(line);
    end;

    // complete the output with what's left
    if Trim(s) <> '' then
    begin
      WriteLn(ins + s);
    end;
  end

  else begin
    WriteLn(s);
  end;
end;

procedure TIdMessageClient.ReceiveBody(AMsg: TIdMessage; const ADelim: string = '.');
var
  LMsgEnd: Boolean;
  LActiveDecoder: TIdMessageDecoder;
  LLine: string;

  function ProcessTextPart(ADecoder: TIdMessageDecoder): TIdMessageDecoder;
  var
    LDestStream: TStringStream;
  begin
    LDestStream := TStringStream.Create('');
    try
      Result := ADecoder.ReadBody(LDestStream, LMsgEnd);
      with TIdText.Create(AMsg.MessageParts) do
      begin
        {
        ContentType := ADecoder.Headers.Values['Content-Type'];
        ContentTransfer := ADecoder.Headers.Values['Content-Transfer-Encoding'];
        }

        // RLebeau 10/17/2003
        Headers.AddStdValues(ADecoder.Headers);

        Body.Text := LDestStream.DataString;
      end;
      ADecoder.Free;
    finally
      FreeAndNil(LDestStream);
    end;
  end;

  function ProcessAttachment(ADecoder: TIdMessageDecoder): TIdMessageDecoder;
  var
    LDestStream: TFileStream;
    LTempPathname: string;
  begin
    LTempPathname := MakeTempFilename;
    LDestStream := TFileStream.Create(LTempPathname, fmCreate);
    try
      Result := ADecoder.ReadBody(LDestStream, LMsgEnd);
      with TIdAttachment.Create(AMsg.MessageParts) do
      begin
        DeleteTempFile := AMsg.DeleteTempFiles;
        {
        ContentType := ADecoder.Headers.Values['Content-Type'];
        ContentTransfer := ADecoder.Headers.Values['Content-Transfer-Encoding'];

        // dsiders 2001.12.01
        ContentDisposition := ADecoder.Headers.Values['Content-Disposition'];
        }

        // RLebeau 10/17/2003
        Headers.AddStdValues(ADecoder.Headers);

        Filename := ADecoder.Filename;
        StoredPathname := LTempPathname;
      end;
      ADecoder.Free;
    finally
      FreeAndNil(LDestStream);
    end;
  end;

const
  wDoublePoint = ord('.') shl 8 + ord('.');

Begin
  LMsgEnd := False;
  if AMsg.NoDecode then
  begin
    Capture(AMsg.Body, ADelim);
  end

  else begin
    BeginWork(wmRead);
    try
      LActiveDecoder := nil;
      repeat

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久国产精品| 欧美三级日本三级少妇99| 日本一区二区三区四区| 91精品国产免费| 136国产福利精品导航| 在线观看视频一区| aaa亚洲精品| 国产**成人网毛片九色| 秋霞午夜鲁丝一区二区老狼| 夜夜操天天操亚洲| 国产精品美女久久久久久久久 | 国产精品国产三级国产有无不卡 | 亚洲精品视频自拍| 一区二区三区日韩欧美精品| 亚洲欧美电影院| 亚洲综合久久久久| 亚洲国产wwwccc36天堂| 亚洲成a人片综合在线| 午夜精品在线看| 美日韩一级片在线观看| 激情综合五月天| 成人午夜大片免费观看| 色综合色狠狠综合色| 欧美探花视频资源| 精品国产免费人成电影在线观看四季| 日韩三级电影网址| 国产精品久久久久久久久搜平片 | 一区在线观看视频| 午夜精品久久久久久久久| 另类小说图片综合网| hitomi一区二区三区精品| 日本精品视频一区二区| 国产成人av电影在线播放| 国产乱码精品一区二区三区忘忧草 | 亚洲成人免费观看| 91麻豆自制传媒国产之光| 欧美图区在线视频| 久久免费看少妇高潮| 一区二区三区四区乱视频| 欧美aaa在线| 成人白浆超碰人人人人| 8x8x8国产精品| 国产精品人妖ts系列视频| 午夜精品福利在线| 成人高清伦理免费影院在线观看| 欧美亚一区二区| 国产三区在线成人av| 亚洲成人福利片| 成人综合在线网站| 日韩精品一区二区三区swag | 日本中文字幕不卡| 色综合久久88色综合天天6| 精品国产乱码久久久久久影片| 一区二区三区在线观看视频| 国产呦精品一区二区三区网站| 欧美在线不卡一区| 国产精品福利一区| 国产在线播放一区二区三区| 91精品蜜臀在线一区尤物| 成人免费在线视频| 粉嫩13p一区二区三区| 日韩免费成人网| 日韩国产欧美在线观看| 色综合久久天天| 国产精品久久久久久久久久久免费看 | 欧美精品xxxxbbbb| 亚洲免费观看高清| 99久久免费国产| 中文字幕欧美日本乱码一线二线| 美国欧美日韩国产在线播放| 欧美精品在欧美一区二区少妇| 亚洲欧美激情视频在线观看一区二区三区| 激情深爱一区二区| 日韩欧美成人一区| 精品一区二区三区影院在线午夜| 欧美日韩一区久久| 午夜天堂影视香蕉久久| 欧美日韩中字一区| 亚洲成a人片在线不卡一二三区| 日韩理论电影院| 国产精品一区二区在线看| 日韩三级中文字幕| 青青草国产精品97视觉盛宴| 欧美一区二区三区在| 免费三级欧美电影| 2023国产精品| 91同城在线观看| 伊人婷婷欧美激情| 欧美日韩黄色影视| 麻豆成人综合网| 精品动漫一区二区三区在线观看| 麻豆成人免费电影| 国产精品色哟哟网站| 91免费在线看| 夜夜嗨av一区二区三区中文字幕| 欧美群妇大交群的观看方式| 久久精品999| 国产视频一区二区三区在线观看| 成人av资源在线| 亚洲尤物视频在线| 日韩美女一区二区三区四区| 国产成人av一区| 一区二区激情视频| 日韩欧美在线一区二区三区| 国产99久久久精品| 亚洲国产视频一区| 久久综合久久久久88| 91麻豆国产自产在线观看| 午夜影院久久久| 国产偷国产偷精品高清尤物| 91在线视频播放| 亚洲va在线va天堂| 欧美精彩视频一区二区三区| 欧美亚洲综合久久| 国产精品自拍毛片| 日韩精品一级二级 | 欧美亚洲国产一区二区三区va| 免费观看成人鲁鲁鲁鲁鲁视频| 中文在线一区二区| 精品久久久久久久人人人人传媒| 99久久国产综合精品女不卡| 麻豆精品国产传媒mv男同| 亚洲午夜日本在线观看| 国产人妖乱国产精品人妖| 制服丝袜亚洲精品中文字幕| 99国产一区二区三精品乱码| 激情综合亚洲精品| 免费观看成人av| 亚洲h在线观看| 亚洲精品国产一区二区精华液 | 国产精品久久久久久久久免费桃花 | 国产日本欧美一区二区| 欧美三区免费完整视频在线观看| 国产一区美女在线| 亚洲香肠在线观看| 欧美日韩免费在线视频| 国产午夜亚洲精品理论片色戒| 亚洲h在线观看| 欧美日韩国产123区| 亚洲3atv精品一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 国产亚洲综合色| 麻豆视频观看网址久久| 91黄色免费观看| 亚洲一区视频在线观看视频| 国产精品美女久久久久久久久久久| 成人动漫av在线| 91精品麻豆日日躁夜夜躁| 国产69精品久久久久777| 亚洲大片精品永久免费| 国产精品对白交换视频| 欧美日韩亚洲丝袜制服| 91精品国产综合久久香蕉的特点| 日日摸夜夜添夜夜添国产精品| 精品乱人伦一区二区三区| 91福利国产成人精品照片| 久久99精品久久只有精品| 久久av中文字幕片| 日韩中文字幕不卡| 亚洲福利一二三区| 亚洲特黄一级片| 中文一区二区完整视频在线观看| 久久久久久97三级| 精品国产91亚洲一区二区三区婷婷| 欧美日韩不卡一区二区| 精品视频1区2区| 色综合久久精品| 色婷婷综合五月| 99久久精品免费看| 不卡的av电影| 97精品视频在线观看自产线路二| 波多野结衣中文字幕一区二区三区| 国产一区二区三区免费在线观看| 国产综合久久久久影院| 国产成人综合亚洲网站| 成人一二三区视频| 不卡高清视频专区| 99久久久精品| 欧洲中文字幕精品| 欧美亚洲动漫精品| 久久众筹精品私拍模特| 久久亚洲精华国产精华液 | 91蜜桃传媒精品久久久一区二区| 欧美性猛片aaaaaaa做受| 91蜜桃在线观看| 欧美三级午夜理伦三级中视频| 色拍拍在线精品视频8848| 欧美日韩电影在线播放| 91精品国产综合久久久久久久| 91精品婷婷国产综合久久性色 | 亚洲精品一区二区三区影院| 国产喷白浆一区二区三区| 欧美精品久久久久久久多人混战| 加勒比av一区二区| 欧美亚洲禁片免费| 在线观看亚洲精品视频| 欧美日韩一级片在线观看| 国产清纯在线一区二区www| 97se狠狠狠综合亚洲狠狠| 欧美日韩国产影片|