Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/ExternalBoardPlugInMain.pas

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


Revision 1.12 - (show 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 unit ExternalBoardPlugInMain;
2
3 interface
4
5 uses
6 Windows, Classes, SysUtils, Menus,
7 IdHTTP, IdComponent, IdGlobal, IdException,
8 AbonUnit;
9
10 type
11
12 // ?????潟???若????????????????????
13 TDownloadState = (dsWait, dsWork, dsComplete, dsDiffComplete, dsNotModify, dsAbort, dsError);
14
15 // ??絎????? URL ???????????違?ゃ?潟?у???篁?????????????
16 TAcceptType = (atNoAccept, atBBS, atBoard, atThread);
17
18 // ?<???ャ?若??潟????/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 // *************************************************************************
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 ): TAcceptType; stdcall; // URL ??┏蕁?
47
48 // *************************************************************************
49 // ?<???ャ?若??潟????/span>
50 // *************************************************************************
51 TOnPlugInMenu = procedure(
52 inInstance : DWORD // ?<???ャ?若??潟????/span>
53 ); stdcall;
54
55 // *************************************************************************
56 // ?鴻???荀с? URL ?????鴻??????? URL ??絨????冴??
57 // *************************************************************************
58 TOnListURL2ThreadURL = function(
59 inListURL : PChar; // ?鴻???荀с??腓冴???? URL
60 inFileName : PChar // ?鴻?????????<?ゃ????
61 ) : PChar; stdcall; // ?鴻??????? URL
62
63
64 function CreateResultString(
65 resultStr : string
66 ) : PChar; stdcall;
67
68 procedure DisposeResultString(
69 resultStr : PChar
70 ); stdcall;
71
72 var
73 socket : TIdHTTP;
74
75 implementation
76
77 uses ExternalBoardManager, ExternalThreadItem, GikoSystem, BoardGroup, Giko;
78
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 // ?<???祉?若?吾??茵?ず????
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 // ?純?宴????????????????(?????∽??
158 // *************************************************************************
159 procedure InitializeSocket(
160 inSocket : TIdHTTP
161 );
162 begin
163
164 if inSocket <> nil then begin
165 // ?ゃ???潟????┃絎?
166 if Assigned( OnWork ) then
167 inSocket.OnWork := OnWork;
168 if Assigned( OnWorkBegin ) then
169 inSocket.OnWorkBegin := OnWorkBegin;
170 if Assigned( OnWorkEnd ) then
171 inSocket.OnWorkEnd := OnWorkEnd;
172
173 // ??篆<???≪????荐??
174 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 {$IFDEF DEBUG}
182 Writeln('------------------------------------------------------------');
183 {$ENDIF}
184 //inSocket.AllowCookies := False;
185 if GikoSys.Setting.ReadProxy then begin
186 if GikoSys.Setting.ProxyProtocol then
187 inSocket.ProtocolVersion := pv1_1
188 else
189 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 if GikoSys.Setting.ReadProxyUserID <> '' then
195 inSocket.ProxyParams.BasicAuthentication := True;
196 {$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 inSocket.ProtocolVersion := pv1_1
204 else
205 inSocket.ProtocolVersion := pv1_0;
206 inSocket.ProxyParams.ProxyServer := '';
207 inSocket.ProxyParams.ProxyPort := 80;
208 inSocket.ProxyParams.ProxyUsername := '';
209 inSocket.ProxyParams.ProxyPassword := '';
210 {$IFDEF DEBUG}
211 Writeln('???????決┃絎?????');
212 {$ENDIF}
213 end;
214 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 // httpSocket : TIdHTTP;
230 resStream : TMemoryStream;
231 content : string;
232
233 begin
234
235 {$IFDEF DEBUG}
236 Writeln('ExternalBoardManager.InternalDownload');
237 {$ENDIF}
238 // Result := -1;
239
240 socket := TIdHTTP.Create( nil );
241 try
242 InitializeSocket( socket );
243
244 socket.Request.ContentRangeStart := inRangeStart;
245 socket.Request.ContentRangeEnd := inRangeEnd;
246 if (ioModified <> 0) and (ioModified <> ZERO_DATE) then
247 socket.Request.LastModified := ioModified - OffsetFromUTC;
248 if inRangeStart = 0 then
249 socket.Request.AcceptEncoding := 'gzip'
250 else
251 socket.Request.AcceptEncoding := '';
252 socket.Request.Accept := 'text/html';
253
254 resStream := TMemoryStream.Create;
255 try
256 try
257 resStream.Clear;
258 {$IFDEF DEBUG}
259 Writeln('URL: ' + inURL);
260 {$ENDIF}
261 socket.Get( inURL, resStream );
262 {$IFDEF DEBUG}
263 Writeln('??緇??т?紊?????');
264 {$ENDIF}
265
266 content := GikoSys.GzipDecompress( resStream, socket.Response.ContentEncoding );
267
268 ioModified := socket.Response.LastModified;
269
270 Result := socket.ResponseCode;
271 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 Result := socket.ResponseCode;
280 end;
281 on E: EIdConnectException do begin
282 ioModified := ZERO_DATE;
283 outResultData := nil;
284 Result := socket.ResponseCode;
285 //Item.ErrText := E.Message;
286 end;
287 //筝??????????????潟?潟???ャ??
288 on E: EIdClosedSocket do begin
289 ioModified := ZERO_DATE;
290 outResultData := nil;
291 Result := 408; //?≪?????L?????????????????鴻???潟?鴻?潟?若????200???障?障??/span>
292 //???c?????障?????с????ず?????????若?潟?若????菴???
293 end;
294 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 Result := socket.ResponseCode;
302 //Item.ErrText := E.Message;
303 end;
304 end;
305 finally
306 resStream.Free;
307 end;
308
309 finally
310 socket.Free;
311 socket := nil;
312 end;
313
314 end;
315
316 // *************************************************************************
317 // ??絎????? 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 tmpURL, Protocol, Host, Path, Document, Port, Bookmark : string;
330 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 tmpURL := string(inURL);
341 GikoSys.ParseURI(tmpURL, Protocol,Host, Path, Document, Port, Bookmark);
342 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 httpSocket.Request.Referer := Protocol + '://' + Host;
347 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 outResultData := CreateResultString( resStream.DataString );
376 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 // 鐚??<????????? dat 綵√??????若???????若??????????
391 // *************************************************************************
392
393 function InternalAbon(
394 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
395 inDatPath : PChar // dat ???<?ゃ????????????/span>
396
397 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
398 var
399 datList : TStringList;
400 FileName : String;
401 begin
402
403 datList := TStringList.Create;
404 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
416
417 end;
418 // *************************************************************************
419 // 鐚??<????????? dat 綵√??????若???????若??????????
420 // ????????鐚????鴻????/span>
421 // *************************************************************************
422
423 function InternalAbonForOne(
424 inDatText : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<>[?壕?] ?ф??????????????鴻??
425 inDatPath : PChar; // dat ???<?ゃ????????????/span>
426 inNo : Integer // 荀?羆??????????合???/span>
427 ) : PChar; stdcall; // ???若????羝??帥? dat 綵√??????鴻??
428 var
429 datString : String;
430 FileName : String;
431 begin
432
433 datString := string( inDatText );
434 FileName := string( inDatPath );
435 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
443 // *************************************************************************
444 // 鐚??<????????? dat 綵√? 1 茵??? HTML ?????????
445 // *************************************************************************
446 function InternalDat2HTML(
447 inDatRes : PChar; // ????<>?<?若??lt;>?ヤ?ID<>????<> ?ф??????????????鴻??
448 inResNo : DWORD; // ???合???/span>
449 inIsNew : Boolean // ?亥?????鴻???? True
450 ) : PChar; stdcall; // ?翫就?????? HTML
451 var
452 board : TBoard;
453 threadItem : TThreadItem;
454 begin
455
456 // ?????若????????/span>
457 board := TBoard.Create( nil, 'about://dummy/' );
458 threadItem := TThreadItem.Create( nil, 'about://dummy/test/read.cgi/dummy/' );
459 try
460 try
461 board.Add( threadItem );
462
463 Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew );
464 except
465 Result := nil;
466 end;
467 finally
468 board.Free;
469 end;
470
471 end;
472
473 // *************************************************************************
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 Result := 0;
494 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 GikoForm.PlugInMenu.items[i].Free;
511 //GikoForm.PlugInMenu.Delete( i );
512 Break;
513 end;
514 end;
515
516 end;
517
518 exports
519 CreateResultString,
520 DisposeResultString,
521 VersionInfo,
522 InternalPrint,
523 InternalDebugPrint,
524 InternalDownload,
525 InternalPost,
526 InternalAbon,
527 InternalAbonForOne,
528 InternalDat2HTML,
529 AddPlugInMenu,
530 RemovePlugInMenu;
531
532 end.

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