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.19 - (show annotations) (download) (as text)
Sun Feb 18 08:09:21 2007 UTC (17 years, 1 month ago) by h677
Branch: MAIN
CVS Tags: v1_59_0_771, v1_59_0_770, v1_59_0_773, v1_59_0_772, v1_59_0_775, v1_59_0_774, v1_59_0_777, v1_59_0_776, v1_56_0_715, v1_59_0_778, v1_63_1_819, v1_57_0_737, v1_62_0_812, v1_57_0_735, v1_57_0_734, v1_57_0_733, v1_57_0_732, v1_57_0_731, v1_57_0_730, v1_57_0_739, v1_57_0_738, v1_59_1_765, v1_60_0_788, v1_60_0_789, v1_58_0_748, v1_58_0_745, v1_60_0_781, v1_60_0_782, v1_58_0_746, v1_60_0_784, v1_60_0_786, v1_60_0_787, v1_56_0_707, v1_59_0_767, v1_56_0_705, v1_56_0_704, v1_56_0_703, v1_56_0_702, v1_56_0_701, v1_56_0_700, v1_59_1_778, v1_57_0_723, v1_59_0_768, v1_59_0_769, v1_57_0_725, v1_57_0_726, v1_57_0_727, v1_57_0_720, v1_57_0_722, v1_57_1_744, v1_57_0_728, v1_57_0_729, v1_57_0_736, v1_58_0_752, v1_58_0_750, v1_58_0_751, v1_58_0_756, v1_58_0_757, v1_58_0_754, v1_58_0_755, v1_58_0_759, v1_57_0_719, v1_57_0_718, v1_56_0_716, v1_56_0_710, v1_56_0_711, v1_56_1_717, v1_56_1_716, v1_61_0_796, v1_61_0_797, v1_61_0_795, v1_61_0_798, v1_61_0_799, v1_55_0_696, v1_55_0_697, v1_55_0_694, v1_55_0_695, v1_56_2_724, v1_56_2_722, v1_55_1_697, v1_56_0_714, v1_63_0_818, v1_63_0_817, v1_63_0_816, v1_63_0_815, v1_62_0_805, v1_62_0_804, v1_62_0_807, v1_62_0_806, v1_56_0_712, v1_62_0_803, v1_62_0_802, v1_56_0_713, v1_62_0_809, v1_56_0_721, v1_60_0_780, v1_60_0_779, v1_62_0_810, v1_62_0_811, v1_58_0_747, v1_60_0_783, v1_59_2_785, marged_bRESPOPUP, v1_56_0_706, v1_60_1_793, v1_58_0_763, v1_58_0_762, v1_58_0_761, v1_58_0_760, v1_62_1_813, v1_57_2_749, v1_57_0_742, v1_57_0_743, v1_57_0_740, v1_57_0_741, v1_56_0_709, v1_57_0_744, v1_56_0_708, v1_61_0_800, v1_56_0_699, v1_56_0_698, v1_60_0_793, v1_60_0_792, v1_60_0_791, v1_60_0_790, v1_60_2_794, v1_61_1_801, HEAD
Branch point for: Bb57, Bb56, Bb55, Bb62, Bb63, Bb60, Bb61, Bb59, Bb58, bRESPOPUP, bListSU
Changes since 1.18: +6 -2 lines
File MIME type: text/x-pascal
セキュリティソフトの誤反応対策機能を追加

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

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