?? idnntp.pas
字號:
begin
SendCmd('NEWGROUPS ' + ConvertDateTimeDist(ADate, AGMT, ADistributions), 231);
Capture(AList);
end;
procedure TIdNNTP.GetNewNewsList(const ANewsgroups: string; const ADate: TDateTime;
const AGMT: boolean; ADistributions: string; AList: TStrings);
begin
SendCmd('NEWNEWS ' + ANewsgroups + ' ' + ConvertDateTimeDist(ADate, AGMT, ADistributions), 230);
Capture(AList);
end;
function TIdNNTP.ConvertDateTimeDist(ADate: TDateTime; AGMT: boolean;
const ADistributions: string): string;
begin
Result := FormatDateTime('yymmdd hhnnss', ADate);
if AGMT then begin
Result:= Result + ' GMT';
end;
if Length(ADistributions) > 0 then begin
Result := ' <' + ADistributions + '>';
end;
end;
(*
3.1. The ARTICLE, BODY, HEAD, and STAT commands
There are two forms to the ARTICLE command (and the related BODY,
HEAD, and STAT commands), each using a different method of specifying
which article is to be retrieved. When the ARTICLE command is
followed by a message-id in angle brackets ("<" and ">"), the first
form of the command is used; when a numeric parameter or no parameter
is supplied, the second form is invoked.
The text of the article is returned as a textual response, as
described earlier in this document.
The HEAD and BODY commands are identical to the ARTICLE command
except that they respectively return only the header lines or text
body of the article.
The STAT command is similar to the ARTICLE command except that no
text is returned. When selecting by message number within a group,
the STAT command serves to set the current article pointer without
sending text. The returned acknowledgement response will contain the
message-id, which may be of some value. Using the STAT command to
select by message-id is valid but of questionable value, since a
selection by message-id does NOT alter the "current article pointer".
3.1.1. ARTICLE (selection by message-id)
ARTICLE <message-id>
Display the header, a blank line, then the body (text) of the
specified article. Message-id is the message id of an article as
shown in that article's header. It is anticipated that the client
will obtain the message-id from a list provided by the NEWNEWS
command, from references contained within another article, or from
the message-id provided in the response to some other commands.
Please note that the internally-maintained "current article pointer"
is NOT ALTERED by this command. This is both to facilitate the
presentation of articles that may be referenced within an article
being read, and because of the semantic difficulties of determining
the proper sequence and membership of an article which may have been
posted to more than one newsgroup.
3.1.2. ARTICLE (selection by number)
ARTICLE [nnn]
Displays the header, a blank line, then the body (text) of the
current or specified article. The optional parameter nnn is the
numeric id of an article in the current newsgroup and must be chosen
from the range of articles provided when the newsgroup was selected.
If it is omitted, the current article is assumed.
The internally-maintained "current article pointer" is set by this
command if a valid article number is specified.
[the following applies to both forms of the article command.] A
response indicating the current article number, a message-id string,
and that text is to follow will be returned.
The message-id string returned is an identification string contained
within angle brackets ("<" and ">"), which is derived from the header
of the article itself. The Message-ID header line (required by
RFC850) from the article must be used to supply this information. If
the message-id header line is missing from the article, a single
digit "0" (zero) should be supplied within the angle brackets.
Since the message-id field is unique with each article, it may be
used by a news reading program to skip duplicate displays of articles
that have been posted more than once, or to more than one newsgroup.
3.1.3. Responses
220 n <a> article retrieved - head and body follow
(n = article number, <a> = message-id)
221 n <a> article retrieved - head follows
222 n <a> article retrieved - body follows
223 n <a> article retrieved - request text separately
412 no newsgroup has been selected
420 no current article has been selected
423 no such article number in this group
430 no such article found
*)
function TIdNNTP.GetArticle(AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('ARTICLE', [220, 420]) = 220;
if Result then begin
AMsg.Clear;
if Length(ReceiveHeader(AMsg)) = 0 then begin
// Only retreive the body if we do not already have a full RFC
ReceiveBody(AMsg);
end;
end;
end;
function TIdNNTP.GetArticle(const AMsgNo: Integer; AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('ARTICLE ' + IntToStr(AMsgNo), [220, 423]) = 220;
if Result then begin
AMsg.Clear;
if Length(ReceiveHeader(AMsg)) = 0 then begin
// Only retreive the body if we do not already have a full RFC
ReceiveBody(AMsg);
end;
end;
end;
function TIdNNTP.GetArticle(const AMsgID: string; AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('ARTICLE ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [220, 430]) = 220;
if Result then begin
AMsg.Clear;
if Length(ReceiveHeader(AMsg)) = 0 then begin
// Only retreive the body if we do not already have a full RFC
ReceiveBody(AMsg);
end;
end;
end;
function TIdNNTP.GetArticle(AMsg: TStrings): Boolean;
begin
Result := True;
SendCmd('ARTICLE', 220);
AMsg.Clear;
Capture(AMsg);
end;
function TIdNNTP.GetArticle(const AMsgNo: Integer; AMsg: TStrings): Boolean;
begin
Result := SendCmd('ARTICLE ' + IntToStr(AMsgNo), [220, 423]) = 220;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetArticle(const AMsgID: string; AMsg: TStrings): Boolean;
begin
Result := SendCmd('ARTICLE ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [220, 430]) = 220;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetArticle(AMsg: TStream): Boolean;
begin
Result := True;
SendCmd('ARTICLE', 220);
Capture(AMsg);
end;
function TIdNNTP.GetArticle(const AMsgNo: Integer; AMsg: TStream): Boolean;
begin
Result := SendCmd('ARTICLE ' + IntToStr(AMsgNo), [220, 423]) = 220;
if Result then begin
Capture(AMsg);
end;
end;
function TIdNNTP.GetArticle(const AMsgID: string; AMsg: TStream): Boolean;
begin
Result := SendCmd('ARTICLE ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [220, 430]) = 220;
if Result then begin
Capture(AMsg);
end;
end;
function TIdNNTP.GetBody(AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('BODY', [222, 420]) = 222;
if Result then begin
AMsg.Clear;
ReceiveBody(AMsg);
end;
end;
function TIdNNTP.GetBody(const AMsgNo: Integer; AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('BODY ' + IntToStr(AMsgNo), [222, 423]) = 222;
if Result then begin
AMsg.Clear;
ReceiveBody(AMsg);
end;
end;
function TIdNNTP.GetBody(const AMsgID: string; AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('BODY ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [222, 430]) = 222;
if Result then begin
AMsg.Clear;
ReceiveBody(AMsg);
end;
end;
function TIdNNTP.GetBody(AMsg: TStrings): Boolean;
begin
Result := SendCmd('BODY', [222, 420]) = 222;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetBody(const AMsgNo: Integer; AMsg: TStrings): Boolean;
begin
Result := SendCmd('BODY ' + IntToStr(AMsgNo), [222, 423]) = 222;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetBody(const AMsgID: string; AMsg: TStrings): Boolean;
begin
Result := SendCmd('BODY ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [222, 430]) = 222;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetBody(AMsg: TStream): Boolean;
begin
Result := SendCmd('BODY', [222, 420]) = 222;
if Result then begin
Capture(AMsg);
end;
end;
function TIdNNTP.GetBody(const AMsgNo: Integer; AMsg: TStream): Boolean;
begin
Result := SendCmd('BODY ' + IntToStr(AMsgNo), [222, 423]) = 222;
if Result then begin
Capture(AMsg);
end;
end;
function TIdNNTP.GetBody(const AMsgID: string; AMsg: TStream): Boolean;
begin
Result := SendCmd('BODY ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [222, 430]) = 222;
if Result then begin
Capture(AMsg);
end;
end;
function TIdNNTP.GetHeader(AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('HEAD', [221, 420]) = 221;
if Result then begin
AMsg.Clear;
ReceiveHeader(AMsg, '.');
end;
end;
function TIdNNTP.GetHeader(const AMsgNo: Integer; AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('HEAD ' + IntToStr(AMsgNo), [221, 423]) = 221;
if Result then begin
AMsg.Clear;
ReceiveHeader(AMsg, '.');
end;
end;
function TIdNNTP.GetHeader(const AMsgID: string; AMsg: TIdMessage): Boolean;
begin
Result := SendCmd('HEAD ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [221, 430]) = 221;
if Result then begin
AMsg.Clear;
ReceiveHeader(AMsg, '.');
end;
end;
function TIdNNTP.GetHeader(AMsg: TStrings): Boolean;
begin
Result := SendCmd('HEAD', [221, 420]) = 221;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetHeader(const AMsgNo: Integer; AMsg: TStrings): Boolean;
begin
Result := SendCmd('HEAD ' + IntToStr(AMsgNo), [221, 423]) = 221;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetHeader(const AMsgID: string; AMsg: TStrings): Boolean;
begin
Result := SendCmd('HEAD ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [221, 430]) = 221;
if Result then begin
AMsg.Clear;
Capture(AMsg);
end;
end;
function TIdNNTP.GetHeader(AMsg: TStream): Boolean;
begin
Result := SendCmd('HEAD', [221, 420]) = 221;
if Result then begin
Capture(AMsg);
end;
end;
function TIdNNTP.GetHeader(const AMsgNo: Integer; AMsg: TStream): Boolean;
begin
Result := SendCmd('HEAD ' + IntToStr(AMsgNo), [221, 423]) = 221;
if Result then begin
Capture(AMsg);
end;
end;
function TIdNNTP.GetHeader(const AMsgID: string; AMsg: TStream): Boolean;
begin
Result := SendCmd('HEAD ' + IdGlobal.EnsureMsgIDBrackets(AMsgID), [221, 430]) = 221;
if Result then begin
Capture(AMsg);
end;
end;
procedure TIdNNTP.GetNewsgroupList(AStream: TStream);
begin
SendCmd('LIST', 215);
Capture(AStream);
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -