ICYParser.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit ICYParser;
  2.    (*********************************************************************
  3.     * The contents of this file are used with permission, subject to    *
  4.     * the Mozilla Public License Version 1.1 (the "License"); you may   *
  5.     * not use this file except in compliance with the License. You may  *
  6.     * obtain a copy of the License at                                   *
  7.     * http://www.mozilla.org/MPL/MPL-1.1.html                           *
  8.     *                                                                   *
  9.     * Software distributed under the License is distributed on an       *
  10.     * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or    *
  11.     * implied. See the License for the specific language governing      *
  12.     * rights and limitations under the License.                         *
  13.     *                                                                   *
  14.     * (C) 2004 Martin Offenwanger: coder@dsplayer.de                    *
  15.     *********************************************************************)
  16. {
  17. @author(Martin Offenwanger: coder@dsplayer.de)
  18. @created(Apr 22, 2004)
  19. @lastmod(Sep 09, 2004)
  20. }
  21. interface
  22. // ICY Item Names
  23. const
  24.   ICYMetaInt = 'icy-metaint:';
  25.   ICYName = 'icy-name:';
  26.   ICYGenre = 'icy-genre:';
  27.   ICYURL = 'icy-url:';
  28.   ICYBitrate = 'icy-br:';
  29.   ICYError = 'icy-error:';
  30.   // functions return error " N/A (String)"," 0 (integer)"," false (Boolean)"
  31. function GetICYItem(ICYItemName: string; Streamheader: string): string;
  32. function GetServerICYInt(Streamheader: string): integer;
  33. function GetServerICYName(StreamHeader: string): string;
  34. function GetServerICYGenre(StreamHeader: string): string;
  35. function GetServerICYURL(StreamHeader: string): string;
  36. function GetServerICYBitRate(StreamHeader: string): string;
  37. function GetICYSuccessfullyConnected(StreamHeader: string;
  38.   out ErrMessage: string): boolean;
  39. implementation
  40. uses
  41.   SysUtils;
  42. function GetICYSuccessfullyConnected(StreamHeader: string;
  43.   out ErrMessage: string): boolean;
  44. var
  45.   Pos1: integer;
  46. begin
  47.   Pos1 := Pos('200 OK', StreamHeader);
  48.   if Pos1 = 0 then
  49.   begin
  50.     ErrMessage := copy(StreamHeader, 1, length(StreamHeader));
  51.     result := false;
  52.     exit;
  53.   end;
  54.   ErrMessage := '';
  55.   result := true;
  56. end;
  57. function GetICYItem(ICYItemName: string; Streamheader: string): string;
  58. var
  59.   Pos1: integer;
  60.   ICYItem: string;
  61.   i: integer;
  62. begin
  63.   Pos1 := Pos(ICYItemName, Streamheader);
  64.   if Pos1 = 0 then
  65.   begin
  66.     result := 'N/A';
  67.     exit;
  68.   end;
  69.   Streamheader := copy(Streamheader, Pos1 + length(ICYItemName),
  70.     length(Streamheader) - Pos1 + length(ICYItemName));
  71.   Pos1 := Pos(#13#10, Streamheader);
  72.   Streamheader := copy(Streamheader, 0, Pos1);
  73.   ICYItem := '';
  74.   for i := 1 to length(Streamheader) - 1 do
  75.     if Streamheader[i] <> ' ' then
  76.       ICYItem := ICYItem + Streamheader[i];
  77.   result := ICYItem;
  78. end;
  79. function GetServerICYName(StreamHeader: string): string;
  80. begin
  81.   result := GetICYItem(ICYName, StreamHeader);
  82. end;
  83. function GetServerICYGenre(StreamHeader: string): string;
  84. begin
  85.   result := GetICYItem(ICYGenre, StreamHeader);
  86. end;
  87. function GetServerICYURL(StreamHeader: string): string;
  88. begin
  89.   result := GetICYItem(ICYURL, StreamHeader);
  90. end;
  91. function GetServerICYBitRate(StreamHeader: string): string;
  92. begin
  93.   result := GetICYItem(ICYBitrate, StreamHeader);
  94. end;
  95. function GetServerICYInt(Streamheader: string): integer;
  96. var
  97.   ResultS: string;
  98. begin
  99.   ResultS := GetICYItem(ICYMetaInt, Streamheader);
  100.   if ResultS = 'N/A' then
  101.   begin
  102.     Result := 0;
  103.     exit;
  104.   end;
  105.   Result := strtoint(ResultS);
  106. end;
  107. end.