Develop and Download Open Source Software

Browse CVS Repository

Annotation of /gikonavigoeson/gikonavi/ExternalBoardPlugInMain.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.12 - (hide annotations) (download) (as text)
Thu Aug 26 17:07:19 2004 UTC (19 years, 7 months ago) by h677
Branch: MAIN
CVS Tags: b48, v1_48_0_539, v1_48_0_538, v1_48_0_537, v1_48_0_536
Changes since 1.11: +5 -2 lines
File MIME type: text/x-pascal
InternalPostで、とりあえずrefererを送るようにしてみた(暫定的)

1 yoffy 1.1 unit ExternalBoardPlugInMain;
2    
3     interface
4    
5     uses
6 yoffy 1.8 Windows, Classes, SysUtils, Menus,
7 yoffy 1.1 IdHTTP, IdComponent, IdGlobal, IdException,
8     AbonUnit;
9    
10     type
11    
12     // ?????潟???若????????????????????
13     TDownloadState = (dsWait, dsWork, dsComplete, dsDiffComplete, dsNotModify, dsAbort, dsError);
14    
15 yoffy 1.4 // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
16     TAcceptType = (atNoAccept, atBBS, atBoard, atThread);
17    
18 yoffy 1.8 // ?<???ャ?若??潟????/span>
19     TMenuHandler = procedure(
20     inHandle : HMENU // ?<???ャ?若??潟????/span>
21     ); stdcall;
22    
23     // *************************************************************************
24     // ?????違?ゃ?潟??(罩c???????若????????
25     // *************************************************************************
26     TOnLoad = procedure (
27     inInstance : DWORD // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
28     ); stdcall;
29    
30 yoffy 1.1 // *************************************************************************
31     // ?????違?ゃ?潟?????若?吾?с??/span>
32     // *************************************************************************
33     TOnVersionInfo = procedure(
34     var outAgent : PChar; // ???若?吾?с?潟??筝??????障????膣?膕?????腱?/span>
35     var outMajor : DWORD; // ?<?吾?c?若???若?吾?с??/span>
36     var outMinor : DWORD; // ???ゃ???若???若?吾?с??/span>
37     var outRelease : PChar; // ?????若?号?????
38     var outRevision : DWORD // ?????吾?с?潟???潟????/span>
39     ); stdcall;
40    
41     // *************************************************************************
42     // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
43     // *************************************************************************
44     TOnAcceptURL = function(
45     inURL : PChar // ?ゆ????篁違???с???? URL
46 yoffy 1.4 ): TAcceptType; stdcall; // URL ??┏蕁?
47 yoffy 1.1
48     // *************************************************************************
49 yoffy 1.8 // ?<???ャ?若??潟????/span>
50     // *************************************************************************
51     TOnPlugInMenu = procedure(
52     inInstance : DWORD // ?<???ャ?若??潟????/span>
53     ); stdcall;
54    
55     // *************************************************************************
56 yoffy 1.1 // ?鴻???荀с? URL ?????鴻??????? URL ??絨????冴??
57     // *************************************************************************
58     TOnListURL2ThreadURL = function(
59     inListURL : PChar; // ?鴻???荀с??腓冴???? URL
60     inFileName : PChar // ?鴻?????????<?ゃ????
61     ) : PChar; stdcall; // ?鴻??????? URL
62    
63 h677 1.11
64 yoffy 1.1 function CreateResultString(
65     resultStr : string
66     ) : PChar; stdcall;
67    
68     procedure DisposeResultString(
69     resultStr : PChar
70     ); stdcall;
71    
72 h677 1.11 var
73     socket : TIdHTTP;
74    
75 yoffy 1.1 implementation
76    
77 yoffy 1.6 uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko;
78 yoffy 1.1
79     // *************************************************************************
80     // ?祉???ゃ?? PChar ?с???? API ???<?≪????腆坂?????
81     // *************************************************************************
82     function CreateResultString(
83     resultStr : string
84     ) : PChar; stdcall;
85     var
86     tmp : PChar;
87     begin
88    
89     tmp := PChar( resultStr );
90     GetMem( Result, Length( tmp ) + 1 );
91     Move( tmp^, Result^, Length( tmp ) + 1 );
92    
93     end;
94    
95     // *************************************************************************
96     // ?祉???ゃ?? PChar ?с???? API ???<?≪???????障????
97     // *************************************************************************
98     procedure DisposeResultString(
99     resultStr : PChar
100     ); stdcall;
101     begin
102    
103     FreeMem( resultStr );
104    
105     end;
106    
107     // *************************************************************************
108     // ?????違????????????若?吾?с?潟????緇?????
109     // *************************************************************************
110     procedure VersionInfo(
111     var outAgent : PChar; // ???若?吾?с?潟??筝??????障????膣?膕?????腱?/span>
112     var outMajor : DWORD; // ?<?吾?c?若???若?吾?с??/span>
113     var outMinor : DWORD; // ???ゃ???若???若?吾?с??/span>
114     var outRelease : PChar; // ?????若?号?????
115     var outRevision : DWORD // ?????吾?с?潟???潟????/span>
116     ); stdcall;
117     begin
118    
119     {$IFDEF DEBUG}
120     Writeln('ExternalBoardManager.VersionInfo');
121     {$ENDIF}
122     outAgent := CreateResultString( PChar( APP_NAME ) );
123     outMajor := 1;
124     outMinor := 0;
125     outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) );
126     outRevision := BETA_VERSION;
127    
128     end;
129    
130     // *************************************************************************
131 yoffy 1.6 // ?<???祉?若?吾??茵?ず????
132     // *************************************************************************
133     procedure InternalPrint(
134     inMessage : PChar // ?<???祉?若??/span>
135     ); stdcall;
136     begin
137    
138     GikoForm.AddMessageList( inMessage, nil, gmiWhat );
139    
140     end;
141    
142     // *************************************************************************
143     // ???????違?<???祉?若?吾??茵?ず????
144     // *************************************************************************
145     procedure InternalDebugPrint(
146     inMessage : PChar // ?<???祉?若??/span>
147     ); stdcall;
148     begin
149    
150     {$IFDEF DEBUG}
151     Writeln( inMessage );
152     {$ENDIF}
153    
154     end;
155    
156     // *************************************************************************
157 yoffy 1.2 // ?純?宴????????????????(?????∽??
158 yoffy 1.1 // *************************************************************************
159 yoffy 1.2 procedure InitializeSocket(
160     inSocket : TIdHTTP
161     );
162 yoffy 1.1 begin
163    
164 yoffy 1.2 if inSocket <> nil then begin
165 yoffy 1.1 // ?ゃ???潟????┃絎?
166     if Assigned( OnWork ) then
167 yoffy 1.2 inSocket.OnWork := OnWork;
168 yoffy 1.1 if Assigned( OnWorkBegin ) then
169 yoffy 1.2 inSocket.OnWorkBegin := OnWorkBegin;
170 yoffy 1.1 if Assigned( OnWorkEnd ) then
171 yoffy 1.2 inSocket.OnWorkEnd := OnWorkEnd;
172 yoffy 1.1
173     // ??篆<???≪????荐??
174 yoffy 1.2 inSocket.Request.CustomHeaders.Clear;
175     inSocket.Response.Clear;
176     inSocket.Request.Clear;
177    
178     inSocket.Request.UserAgent := GikoSys.GetUserAgent;
179     inSocket.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
180     inSocket.ProxyParams.BasicAuthentication := False;
181 yoffy 1.1 {$IFDEF DEBUG}
182     Writeln('------------------------------------------------------------');
183     {$ENDIF}
184 yoffy 1.2 //inSocket.AllowCookies := False;
185 yoffy 1.1 if GikoSys.Setting.ReadProxy then begin
186     if GikoSys.Setting.ProxyProtocol then
187 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
188 yoffy 1.1 else
189 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
190     inSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
191     inSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
192     inSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
193     inSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
194 yoffy 1.1 if GikoSys.Setting.ReadProxyUserID <> '' then
195 yoffy 1.2 inSocket.ProxyParams.BasicAuthentication := True;
196 yoffy 1.1 {$IFDEF DEBUG}
197     Writeln('???????決┃絎?????');
198     Writeln('???鴻??: ' + GikoSys.Setting.ReadProxyAddress);
199     Writeln('???若??: ' + IntToStr( GikoSys.Setting.ReadProxyPort ));
200     {$ENDIF}
201     end else begin
202     if GikoSys.Setting.Protocol then
203 yoffy 1.2 inSocket.ProtocolVersion := pv1_1
204 yoffy 1.1 else
205 yoffy 1.2 inSocket.ProtocolVersion := pv1_0;
206     inSocket.ProxyParams.ProxyServer := '';
207     inSocket.ProxyParams.ProxyPort := 80;
208     inSocket.ProxyParams.ProxyUsername := '';
209     inSocket.ProxyParams.ProxyPassword := '';
210 yoffy 1.1 {$IFDEF DEBUG}
211     Writeln('???????決┃絎?????');
212     {$ENDIF}
213     end;
214 yoffy 1.2 end;
215    
216     end;
217    
218     // *************************************************************************
219     // ??絎????? URL ???????潟???若?????????
220     // *************************************************************************
221     function InternalDownload(
222     inURL : PChar; // ?????潟???若?????? URL
223     var ioModified : Double; // ??緇??????????ユ??
224     var outResultData : PChar; // ?????潟???若??????????絖???
225     inRangeStart : DWORD; // ??紮?篏?臀?/span>
226     inRangeEnd : DWORD // 腟?篋?篏?臀?/span>
227     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
228     var
229 h677 1.11 // httpSocket : TIdHTTP;
230 yoffy 1.2 resStream : TMemoryStream;
231     content : string;
232 h677 1.12
233 yoffy 1.2 begin
234    
235     {$IFDEF DEBUG}
236     Writeln('ExternalBoardManager.InternalDownload');
237     {$ENDIF}
238 h677 1.11 // Result := -1;
239 yoffy 1.2
240 h677 1.11 socket := TIdHTTP.Create( nil );
241 yoffy 1.2 try
242 h677 1.11 InitializeSocket( socket );
243 yoffy 1.1
244 h677 1.11 socket.Request.ContentRangeStart := inRangeStart;
245     socket.Request.ContentRangeEnd := inRangeEnd;
246 yoffy 1.1 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
247 h677 1.11 socket.Request.LastModified := ioModified - OffsetFromUTC;
248 yoffy 1.1 if inRangeStart = 0 then
249 h677 1.11 socket.Request.AcceptEncoding := 'gzip'
250 yoffy 1.1 else
251 h677 1.11 socket.Request.AcceptEncoding := '';
252     socket.Request.Accept := 'text/html';
253 yoffy 1.1
254     resStream := TMemoryStream.Create;
255     try
256     try
257     resStream.Clear;
258     {$IFDEF DEBUG}
259     Writeln('URL: ' + inURL);
260     {$ENDIF}
261 h677 1.11 socket.Get( inURL, resStream );
262 yoffy 1.1 {$IFDEF DEBUG}
263     Writeln('??緇??т?紊?????');
264     {$ENDIF}
265    
266 h677 1.11 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
267 yoffy 1.1
268 h677 1.11 ioModified := socket.Response.LastModified;
269    
270     Result := socket.ResponseCode;
271 yoffy 1.1 if (Length( content ) = 0) and (Result = 206) then
272     Result := 304;
273    
274     outResultData := CreateResultString( content );
275     except
276     on E: EIdSocketError do begin
277     ioModified := ZERO_DATE;
278     outResultData := nil;
279 h677 1.11 Result := socket.ResponseCode;
280 yoffy 1.1 end;
281     on E: EIdConnectException do begin
282     ioModified := ZERO_DATE;
283     outResultData := nil;
284 h677 1.11 Result := socket.ResponseCode;
285 yoffy 1.1 //Item.ErrText := E.Message;
286     end;
287 h677 1.11 //筝??????????????潟?潟???ャ??
288     on E: EIdClosedSocket do begin
289     ioModified := ZERO_DATE;
290     outResultData := nil;
291     Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
292     //???c?????障?????с????ず?????????若?潟?若????菴???
293     end;
294 yoffy 1.1 on E: Exception do begin
295     {$IFDEF DEBUG}
296     Writeln('??緇??т?紊?????');
297     Writeln('E.Message: ' + E.Message);
298     {$ENDIF}
299     ioModified := ZERO_DATE;
300     outResultData := nil;
301 h677 1.11 Result := socket.ResponseCode;
302 yoffy 1.1 //Item.ErrText := E.Message;
303     end;
304     end;
305     finally
306     resStream.Free;
307     end;
308    
309     finally
310 h677 1.11 socket.Free;
311     socket := nil;
312 yoffy 1.1 end;
313    
314     end;
315    
316     // *************************************************************************
317 yoffy 1.2 // ??絎????? URL ?吾???若?帥????篆<????
318     // *************************************************************************
319     function InternalPost(
320     inURL : PChar; // ??篆<???? URL
321     inSource : PChar; // ??篆<??????絎?/span>
322     var outResultData : PChar // 菴??c????????絖???
323     ) : Longint; stdcall; // ???鴻???潟?鴻?潟?若??
324     var
325     httpSocket : TIdHTTP;
326     content : string;
327     resStream : TStringStream;
328     sourceStream : TStringStream;
329 h677 1.12 tmpURL, Protocol, Host, Path, Document, Port, Bookmark : string;
330 yoffy 1.2 begin
331    
332     {$IFDEF DEBUG}
333     Writeln('ExternalBoardManager.InternalPost');
334     {$ENDIF}
335     Result := -1;
336    
337     httpSocket := TIdHTTP.Create( nil );
338     try
339     InitializeSocket( httpSocket );
340 h677 1.12 tmpURL := string(inURL);
341     GikoSys.ParseURI(tmpURL, Protocol,Host, Path, Document, Port, Bookmark);
342 yoffy 1.2 httpSocket.Request.CustomHeaders.Add('Pragma: no-cache');
343     httpSocket.Request.AcceptLanguage := 'ja';
344     httpSocket.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
345     httpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
346 h677 1.12 httpSocket.Request.Referer := Protocol + '://' + Host;
347 yoffy 1.2 resStream := TStringStream.Create( content );
348     sourceStream := TStringStream.Create( string( inSource ) );
349     try
350     try
351     {$IFDEF DEBUG}
352     Writeln('URL: ' + inURL);
353     Writeln('Source: ' + inSource);
354     {$ENDIF}
355     httpSocket.Post( string( inURL ), sourceStream, resStream );
356     {$IFDEF DEBUG}
357     Writeln('??緇??т?紊?????');
358     {$ENDIF}
359    
360     Result := httpSocket.ResponseCode;
361    
362     outResultData := CreateResultString( resStream.DataString );
363     except
364     on E: EIdSocketError do begin
365     outResultData := nil;
366     end;
367     on E: EIdConnectException do begin
368     outResultData := nil;
369     end;
370     on E: Exception do begin
371     {$IFDEF DEBUG}
372     Writeln('??緇??т?紊?????');
373     Writeln('E.Message: ' + E.Message);
374     {$ENDIF}
375 yoffy 1.6 outResultData := CreateResultString( resStream.DataString );
376 yoffy 1.2 Result := httpSocket.ResponseCode;
377     end;
378     end;
379     finally
380     resStream.Free;
381     sourceStream.Free;
382     end;
383     finally
384     httpSocket.Free;
385     end;
386    
387     end;
388    
389     // *************************************************************************
390 yoffy 1.1 // 鐚??<????????? dat 綵√??????若???????若??????????
391     // *************************************************************************
392 h677 1.5
393 yoffy 1.1 function InternalAbon(
394 yoffy 1.3 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
395 h677 1.5 inDatPath : PChar // dat ???<?ゃ????????????/span>
396    
397 yoffy 1.7 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
398 yoffy 1.1 var
399     datList : TStringList;
400 yoffy 1.6 FileName : String;
401 yoffy 1.1 begin
402    
403     datList := TStringList.Create;
404 h677 1.9 try
405     datList.Text := string( inDatText );
406     FileName := string( inDatPath );
407     GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG'));
408     GikoSys.FAbon.Execute( datList );
409     GikoSys.FSelectResFilter.Execute( datList );
410    
411     Result := CreateResultString( datList.Text );
412     finally
413     datList.Free;
414     end;
415 yoffy 1.1
416    
417     end;
418 h677 1.5 // *************************************************************************
419     // 鐚??<????????? dat 綵√??????若???????若??????????
420     // ????????鐚????鴻????/span>
421     // *************************************************************************
422    
423     function InternalAbonForOne(
424 yoffy 1.6 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
425     inDatPath : PChar; // dat ???<?ゃ????????????/span>
426     inNo : Integer // 荀?羆??????????合???/span>
427 h677 1.5 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
428     var
429     datString : String;
430 yoffy 1.6 FileName : String;
431 h677 1.5 begin
432    
433     datString := string( inDatText );
434 yoffy 1.6 FileName := string( inDatPath );
435 h677 1.5 GikoSys.FAbon.IndividualAbon( datString, ChangeFileExt(FileName,'.NG'), inNo);
436     GikoSys.FAbon.Execute( datString , inNo);
437     GikoSys.FSelectResFilter.Execute( datString , inNo );
438    
439     Result := CreateResultString( datString );
440    
441     end;
442 yoffy 1.1
443     // *************************************************************************
444     // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
445     // *************************************************************************
446     function InternalDat2HTML(
447 yoffy 1.6 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
448     inResNo : DWORD; // ???合???/span>
449     inIsNew : Boolean // ?亥?????鴻???? True
450 yoffy 1.1 ) : PChar; stdcall; // ?翫就?????? HTML
451     var
452     board : TBoard;
453     threadItem : TThreadItem;
454     begin
455    
456     // ?????若????????/span>
457 yoffy 1.7 board := TBoard.Create( nil, 'about://dummy/' );
458     threadItem := TThreadItem.Create( nil, 'about://dummy/test/read.cgi/dummy/' );
459 yoffy 1.1 try
460 yoffy 1.7 try
461     board.Add( threadItem );
462 yoffy 1.1
463 yoffy 1.7 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
464     except
465     Result := nil;
466     end;
467     finally
468     board.Free;
469 yoffy 1.1 end;
470    
471     end;
472    
473 yoffy 1.8 // *************************************************************************
474     // ?????違?ゃ?潟?<???ャ?若????????菴遵??
475     // *************************************************************************
476     function AddPlugInMenu(
477     inInstance : DWORD; // ?????違?ゃ?潟???ゃ?潟?鴻?帥?潟??/span>
478     inCaption : PChar // ?<???ャ?若??;腓冴??????絖???
479     ) : HMENU; stdcall; // ?<???ャ?若??潟??????菴遵????け???????翫??? NULL
480     var
481     newItem : TMenuItem;
482     begin
483    
484     try
485     newItem := TMenuItem.Create( nil );
486     newItem.Caption := inCaption;
487     newItem.Tag := inInstance;
488     newItem.OnClick := GikoForm.OnPlugInMenuItem;
489     GikoForm.PlugInMenu.Add( newItem );
490    
491     Result := newItem.Handle;
492     except
493 h677 1.10 Result := 0;
494 yoffy 1.8 end;
495    
496     end;
497    
498     // *************************************************************************
499     // ?????違?ゃ?潟?<???ャ?若??????????????/span>
500     // *************************************************************************
501     procedure RemovePlugInMenu(
502     inHandle : HMENU // ?<???ャ?若??潟????/span>
503     ); stdcall;
504     var
505     i : Integer;
506     begin
507    
508     for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
509     if GikoForm.PlugInMenu.Items[ i ].Handle = inHandle then begin
510 h677 1.10 GikoForm.PlugInMenu.items[i].Free;
511     //GikoForm.PlugInMenu.Delete( i );
512 yoffy 1.8 Break;
513     end;
514     end;
515    
516     end;
517    
518 yoffy 1.1 exports
519     CreateResultString,
520     DisposeResultString,
521     VersionInfo,
522 yoffy 1.6 InternalPrint,
523     InternalDebugPrint,
524 yoffy 1.1 InternalDownload,
525 yoffy 1.2 InternalPost,
526 yoffy 1.1 InternalAbon,
527 yoffy 1.6 InternalAbonForOne,
528 yoffy 1.8 InternalDat2HTML,
529     AddPlugInMenu,
530     RemovePlugInMenu;
531 yoffy 1.1
532     end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26