-Ultima- Posted August 27, 2008 Author Share Posted August 27, 2008 (edited) The file finding functions really need polishing. I implemented them without giving them much of a second though (not even close to anything one might call "testing"). I was planning on giving them an update not unlike the updates I made for the cache enumerating functions (pull the data out of the structures and return an array). Until then, I wouldn't bother trying to use any of the functions that involve "find the first entry, then use another function to enumerate the rest one at a time." Regarding examples... I do intend on creating tons of examples, but I want to make sure I don't need to make fundamental widespread implementation changes. The reason I'm holding out on that possibility is that I'm not yet intimately familiar with WinINet to really know the best way to do anything. It's a WIP at the moment I'll be working on examples from here on to help me catch bugs and such, though. As for what advantages these functions have over FTP.au3... Well, I wouldn't say they have too much, other than having a cohesive API across multiple protocols. It's a complete reimplementation of sorts that's slightly more flexible. Edited August 27, 2008 by -Ultima- [ WinINet.au3 | Array.au3 (Optimized) | _UnixTimeParse() ] Link to comment Share on other sites More sharing options...
HeidiR Posted August 27, 2008 Share Posted August 27, 2008 (edited) The file finding functions really need polishing. I implemented them without giving them much of a second though (not even close to anything one might call "testing"). I was planning on giving them an update not unlike the updates I made for the cache enumerating functions (pull the data out of the structures and return an array). Until then, I wouldn't bother trying to use any of the functions that involve "find the first entry, then use another function to enumerate the rest one at a time."Regarding examples... I do intend on creating tons of examples, but I want to make sure I don't need to make fundamental widespread implementation changes. The reason I'm holding out on that possibility is that I'm not yet intimately familiar with WinINet to really know the best way to do anything. It's a WIP at the moment I'll be working on examples from here on to help me catch bugs and such, though.As for what advantages these functions have over FTP.au3... Well, I wouldn't say they have too much, other than having a cohesive API across multiple protocols. It's a complete reimplementation of sorts that's slightly more flexible.Ultima,Thanks for the update. I look forward to your next release. In the meantime, I have been creating some examples of some of your common functions as I worked through them my self. They can be found at the following link for anyone interested:http://autoit.netfirms.com/public/ Edited August 27, 2008 by HeidiR HeidiRFind free applications, code examples and more on my site at:http://heidisdownloads.com/ Link to comment Share on other sites More sharing options...
NELyon Posted August 27, 2008 Share Posted August 27, 2008 You need to call DllOpen("wininet.dll")You just saved my scalp, as I was almost ripping my hair out. That fixed all of my problems. See, I was working on a script that zipped my website files using 7zip and uploading it via FTP. The 7zip'ing worked fine, but the FTP calls were failing (I ended up switching to the FTP.au3 UDF to see if I had luck with that, but it had the same issue). I read this. I called DLLOpen("wininet.au3") at the beginning of the script, and both FTP.au3 and this UDF worked fine. Sorry, but I still ended up using FTP.au3 I might post the script later on. Link to comment Share on other sites More sharing options...
uteotw Posted September 2, 2008 Share Posted September 2, 2008 (edited) @ Ultima Things seems to be moving along nicely and I appriciate all the hard work. I used the example: _WinINet_FindFirstUrlCacheEntry.au3, and I was surprised to see it stop after just returning 2 files. It seems that $avCacheEntryInfo = _WinINet_FindNextUrlCacheEntry($hCacheEntry) doesn't always an return an Array so in your example it exists the main loop. The thing is that my IE cache contains 12 folders, 2922 files which seems to be spread pretty equally across the 12 folders. And there is a total of 254 JPGs. I modified your example script to count a few things: expandcollapse popup;#include <WinINet.au3> #include "WinINet.au3" Global $hWinINetDll = DllOpen("wininet.dll") Global $iPtr, $iLength, $avCacheEntry = _WinINet_FindFirstUrlCacheEntry() Global $hCacheEntry = $avCacheEntry[0] Global $avCacheEntryInfo = $avCacheEntry[1] $avCacheEntry = 0 Local $sExtension = "jpg" Local $iJPG = 0 Local $iNotJPG = 0 Local $iNotArray = 0 Local $iNotArrayTotal = 0 Local $iTotalLoops = 0 While Not @error $iTotalLoops = $iTotalLoops + 1 If IsArray($avCacheEntryInfo) Then If StringLower(StringRight($avCacheEntryInfo[2], StringLen($sExtension))) = StringLower($sExtension) Then $iJPG = $iJPG + 1 Else $iNotJPG = $iNotJPG + 1 EndIf EndIf $avCacheEntryInfo = _WinINet_FindNextUrlCacheEntry($hCacheEntry) If NOT IsArray($avCacheEntryInfo) Then $iNotArray = $iNotArray + 1 ElseIf $iNotArray > 0 Then ConsoleWrite("$iNotArray: " & $iNotArray & @CRLF) $iNotArrayTotal = $iNotArrayTotal + $iNotArray $iNotArray = 0 EndIf If $iNotArray = 2000 Then ; after 2000 I don't expect any more results ConsoleWrite("$iNotArray: " & $iNotArray & @CRLF) ExitLoop EndIf WEnd _WinINet_FindCloseUrlCache($hCacheEntry) DllClose($hWinINetDll) $iTotalLoops = $iTotalLoops - $iNotArray + 1 ConsoleWrite("----------" & @CRLF) ConsoleWrite("$iTotalLoops: " & $iTotalLoops & @CRLF) ConsoleWrite("$iTotalEmpy: " & $iNotArrayTotal & @CRLF) ConsoleWrite("$iJPG: " & $iJPG & @CRLF) ConsoleWrite("$iNotJPG: " & $iNotJPG & @CRLF) ConsoleWrite("----------" & @CRLF) In the end this is the result: $iTotalLoops: 1565 << expected : 2922 $iTotalEmpy: 791 $iJPG: 151 << expected : 254 $iNotJPG: 623 I'm not sure if this is a problem in _WinINet_FindNextUrlCacheEntry(), or a problem with my cache (I'll clean it up and will try again), or may be me who don't understand everything yet. Edited September 2, 2008 by uteotw Link to comment Share on other sites More sharing options...
-Ultima- Posted September 2, 2008 Author Share Posted September 2, 2008 (edited) Are you sure you're looking at Start > Run > %tmp%\..\Tempor~1 for comparison? As well, keep in mind that these cache entries enumerations will also list more than actual cache files -- it'll list those "Visited: " entries that don't necessarily have a real file listed in the Temporary Internet Files directory. Your script doesn't seem to show anything unexpected for me (31 cache entries, 7 "Visited: " URLs, for a total of 38 in $iTotalLoops).Edit: As well, your While loop doesn't break out properly because you're using the wrong stop condition... The loop will never break out even if _WinINet_FindNextUrlCacheEntry() returns with a non-zero @error because you're calling other functions after calling _WinINet_FindNextUrlCacheEntry(), which resets @error. Edited September 2, 2008 by -Ultima- [ WinINet.au3 | Array.au3 (Optimized) | _UnixTimeParse() ] Link to comment Share on other sites More sharing options...
uteotw Posted September 3, 2008 Share Posted September 3, 2008 your While loop doesn't break out properly because you're using the wrong stop condition... The loop will never break out even if _WinINet_FindNextUrlCacheEntry() returns with a non-zero @error because you're calling other functions after calling _WinINet_FindNextUrlCacheEntry(), which resets @error.D'oh! forgot to change it to just "While 1"Are you sure you're looking at Start > Run > %tmp%\..\Tempor~1 for comparison?Yep, actually I was looking into "C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5"So far I had tried on a WinXP x86 and x64, both with IE6.I've just tried it on a 3rd machine (Win2008 x64 - IE7) with which I don't browse much and your script worked fine.In the cache folder Windows explorer show 909 files in total, of which 367 are JPGs.When I tried my script returned:$iTotalLoops: 978 << 69 more loops than expected and this is explained by what you said "keep in mind that these cache entries enumerations will also list more than actual cache files"$iTotalEmpy: 0 << good$iJPG: 367 << as expected$iNotJPG: 611I've tried on a 4th machine (XP x86 - IE6) with which I do a lot of browsing and again your example scripts exits before going through all the files and my script returned:$iTotalLoops: 24773$iTotalEmpy: 7889$iJPG: 4580$iNotJPG: 12304In the end, I don't know what it is, IE cache becoming corrupt over time or after a certain size?All I can say is that may be you could try to have more files in your cache. I usually set the cache size to 200MB.Anyways, I can work around it and still get the info I'm looking for.Thanks again for the UDF. Link to comment Share on other sites More sharing options...
-Ultima- Posted September 6, 2008 Author Share Posted September 6, 2008 (edited) I think there may be a bug in the _WinINet_InternetFindNextFile code. The current code below sets @error to 0 on an error and returns true as if it succeeded. ; Return response If @error Or Not $avResult[0] Then SetError(1, 0, 0) Return True So I just found a little bit of time to work on these UDFs today, and was rereading the comments again... Regarding this, indeed, there was a bug with _WinINet_InternetFindNextFile(). It should read: If @error Or Not $avResult[0] Then Return SetError(1, 0, False) Return True You can return SetError()'s return value immediately, so there's no reason to call SetError() before returning. As such, _WinINet_FtpFindFirstFile() doesn't actually suffer from this issue. I took a look at the functions and decided to create an example: #Include <WinINet.au3> ; Set variables Global $sServerName = "" Global $sDirectory = "" Global $sFilenameFilter = "*.*" ; Open the WinINet DLL and create handles Global $hWinINetDll = DllOpen("wininet.dll") Global $hInternetOpen = _WinINet_InternetOpen("AutoIt/" & @AutoItVersion) Global $hInternetConnect = _WinINet_InternetConnect($hInternetOpen, $INTERNET_SERVICE_FTP, $sServerName) ; Enumerate directory files If _WinINet_FtpSetCurrentDirectory($hInternetConnect, $sDirectory) Then Global $avFtpFile = _WinINet_FtpFindFirstFile($hInternetConnect, $sFilenameFilter) While Not @error ConsoleWrite(DllStructGetData($avFtpFile[1], "FileName") & @CRLF) _WinINet_InternetFindNextFile($avFtpFile[0], DllStructGetPtr($avFtpFile[1])) WEnd EndIf ; Close handles _WinINet_InternetCloseHandle($hInternetConnect) _WinINet_InternetCloseHandle($hInternetOpen) DllClose($hWinINetDll) I've updated my copy of WinINet.au3 with minor changes (didn't upload it yet), but the above example should work with the copy I previously uploaded as is. You'll need to change the server name, directory, and optionally, the filename filter to suit your needs. Edited September 6, 2008 by -Ultima- [ WinINet.au3 | Array.au3 (Optimized) | _UnixTimeParse() ] Link to comment Share on other sites More sharing options...
HeidiR Posted September 9, 2008 Share Posted September 9, 2008 So I just found a little bit of time to work on these UDFs today, and was rereading the comments again... Regarding this, indeed, there was a bug with _WinINet_InternetFindNextFile(). It should read: If @error Or Not $avResult[0] Then Return SetError(1, 0, False) Return True You can return SetError()'s return value immediately, so there's no reason to call SetError() before returning. As such, _WinINet_FtpFindFirstFile() doesn't actually suffer from this issue. I took a look at the functions and decided to create an example: #Include <WinINet.au3> ; Set variables Global $sServerName = "" Global $sDirectory = "" Global $sFilenameFilter = "*.*" ; Open the WinINet DLL and create handles Global $hWinINetDll = DllOpen("wininet.dll") Global $hInternetOpen = _WinINet_InternetOpen("AutoIt/" & @AutoItVersion) Global $hInternetConnect = _WinINet_InternetConnect($hInternetOpen, $INTERNET_SERVICE_FTP, $sServerName) ; Enumerate directory files If _WinINet_FtpSetCurrentDirectory($hInternetConnect, $sDirectory) Then Global $avFtpFile = _WinINet_FtpFindFirstFile($hInternetConnect, $sFilenameFilter) While Not @error ConsoleWrite(DllStructGetData($avFtpFile[1], "FileName") & @CRLF) _WinINet_InternetFindNextFile($avFtpFile[0], DllStructGetPtr($avFtpFile[1])) WEnd EndIf ; Close handles _WinINet_InternetCloseHandle($hInternetConnect) _WinINet_InternetCloseHandle($hInternetOpen) DllClose($hWinINetDll) I've updated my copy of WinINet.au3 with minor changes (didn't upload it yet), but the above example should work with the copy I previously uploaded as is. You'll need to change the server name, directory, and optionally, the filename filter to suit your needs. Hi Ultima, Thanks for the update. One more question on _WinINet_InternetFindNextFile(). I have successfully implemented your _WinINet_InternetFindNextFile() code in a test application and noticed that _WinINet_InternetFindNextFile() returns an error (SetError(1, 0, 0)) when no more file or directories exist in the directory path or I presume a real error occured. Is there any way to know which error occured after calling _WinINet_InternetFindNextFile()? Example1: dir path = \xyz\ (which contains 10 files) call _WinINet_InternetFindNextFile() to get files On the tenth call, _WinINet_InternetFindNextFile() returns 1 (error), which means no more files Example2: dir path = \xyz\ (which contains 10 files) call _WinINet_InternetFindNextFile() to get files On the third call, _WinINet_InternetFindNextFile() returns 1 (error), which means a real error occured and there more files to be read Your thoughts??? HeidiRFind free applications, code examples and more on my site at:http://heidisdownloads.com/ Link to comment Share on other sites More sharing options...
-Ultima- Posted September 10, 2008 Author Share Posted September 10, 2008 _WinAPI_GetLastError() and _WinAPI_GetLastErrorMessage() should get the error code/message for you for the last error that occurred. You'll need to call it as soon as the error is detected, though, because as soon as another error occurs, the last error message will be overwritten. [ WinINet.au3 | Array.au3 (Optimized) | _UnixTimeParse() ] Link to comment Share on other sites More sharing options...
HeidiR Posted September 10, 2008 Share Posted September 10, 2008 (edited) _WinAPI_GetLastError() and _WinAPI_GetLastErrorMessage() should get the error code/message for you for the last error that occurred. You'll need to call it as soon as the error is detected, though, because as soon as another error occurs, the last error message will be overwritten. Hi Ultima, Thanks for the info. _WinAPI_GetLastError() seems very heavy just to find whether your findnextfile reached the end of file normally or a real error occured. One suggestion would be to call GetLastError in your findfilenext function and return the extended error code. e.g. If @error Or Not $avResult[0] Then $rc = DLLCall("kernel32.dll","int","GetLastError") Return SetError(1, $rc, 0) Endif Your thoughts??? Edited September 10, 2008 by HeidiR HeidiRFind free applications, code examples and more on my site at:http://heidisdownloads.com/ Link to comment Share on other sites More sharing options...
Markus21 Posted September 11, 2008 Share Posted September 11, 2008 Hi, Im simply trying to read out a webpace: #include "WinINet.au3" DllOpen("wininet.dll") $internet = _WinINet_InternetOpen("Mozilla") If $internet == 0 Then MsgBox(0, "Error", "Setup Error") EndIf $ip = "10.1.124.15" $port = "80" $internetconnect = _WinINet_InternetConnect($internet, $INTERNET_SERVICE_HTTP, $ip, $port) If @error Then MsgBox(0, "Error", "Error 2") $httprequest = _WinINet_HttpOpenRequest($internetconnect, "GET", "/" ) $readfile = _WinINet_InternetReadFile($httprequest, 5000) sleep(5000) MsgBox(0, "Content", @extended) Last MsgBox returns 0 and there is being send no data at all (checked wireshark) Whats wrong? Bye, Markus Link to comment Share on other sites More sharing options...
-Ultima- Posted September 11, 2008 Author Share Posted September 11, 2008 (edited) Several points...1) You might need to specify a specific object when calling _WinINet_HttpOpenRequest(), not just the root directory (like "/index.html" or something)2) You need to call _WinINet_HttpSendRequest($httprequest) before calling _WinINet_InternetReadFile().3) When you use _WinINet_InternetReadFile(), you need to place it in a While loop to make sure you receive all of the data... like so:local $readfile = binary("") do $readfile &= _WinINet_InternetReadFile($httprequest, 5000) until @error Or Not @extended msgbox(0, "Content", binarytostring($readfile))Examples definitely need to be made demonstrating these points... I'll do so when I find more time @HeidiR: I've considered returning GetLastError error codes in the return macros before, but I don't feel like doing so until I know I've stabilized everything else. The scope of such a change is very large. Edited September 11, 2008 by -Ultima- [ WinINet.au3 | Array.au3 (Optimized) | _UnixTimeParse() ] Link to comment Share on other sites More sharing options...
HeidiR Posted September 11, 2008 Share Posted September 11, 2008 Several points... 1) You might need to specify a specific object when calling _WinINet_HttpOpenRequest(), not just the root directory (like "/index.html" or something) 2) You need to call _WinINet_HttpSendRequest($httprequest) before calling _WinINet_InternetReadFile(). 3) When you use _WinINet_InternetReadFile(), you need to place it in a While loop to make sure you receive all of the data... like so: local $readfile = binary("") do $readfile &= _WinINet_InternetReadFile($httprequest, 5000) until @error Or Not @extended msgbox(0, "Content", binarytostring($readfile)) Examples definitely need to be made demonstrating these points... I'll do so when I find more time @HeidiR: I've considered returning GetLastError error codes in the return macros before, but I don't feel like doing so until I know I've stabilized everything else. The scope of such a change is very large. Ultima, Thanks for your consideration. I'll just add the few lines of code to my version of WinINet until you include it in your public version. Thanks, HeidiR HeidiRFind free applications, code examples and more on my site at:http://heidisdownloads.com/ Link to comment Share on other sites More sharing options...
Markus21 Posted September 11, 2008 Share Posted September 11, 2008 Thank you for your fast answer. It now works, but now here is my next problem: Im trying to fill in a form with the POST command. All addrequestheaders work (TRUE), but the $data header (FALSE) I cant find the mistake, he simply does not want to add the $data Can you figure it out? expandcollapse popup#include "WinINet.au3" DllOpen("wininet.dll") $internet = _WinINet_InternetOpen("Mozilla") If $internet == 0 Then MsgBox(0, "Error", "Setup Error") EndIf $ip = "10.1.124.15" $port = "80" $internetconnect = _WinINet_InternetConnect($internet, $INTERNET_SERVICE_HTTP, $ip, $port) If @error Then MsgBox(0, "Error", "Error 2") ; Data decoded: textuser=blubb&textpass=blubb&Submit=Login&randstr=0.5588322837250421 ; Data encoded: textuser%3Dblubb%26textpass%3Dblubb%26Submit%3DLogin%26randstr%3D0.5588322837250421 $data = "textuser%3Dblubb%26textpass%3Dblubb%26Submit%3DLogin%26randstr%3D0.5588322837250421" & @CRLF ; Data encoded $datalength = StringLen("textuser=blubb&textpass=blubb&Submit=Login&randstr=0.5588322837250421") ; Length of Data decoded ("Wireshark" also takes the length of the decoded string (tried both, decoded and encoded)) I encoded the string in $type = "Content-Type: application/x-www-form-urlencoded" & @CRLF $agent = "User-Agent: Mozilla/4.0" & @CRLF $length = "Content-Length: " & $datalength & @CRLF $httprequest = _WinINet_HttpOpenRequest($internetconnect, "POST", "/fake_server.html" ) $addheader = _WinINet_HttpAddRequestHeaders($httprequest, $agent, $HTTP_ADDREQ_FLAG_ADD) ConsoleWrite($addheader & @CRLF) $addheader = _WinINet_HttpAddRequestHeaders($httprequest, $type, $HTTP_ADDREQ_FLAG_ADD) ConsoleWrite($addheader & @CRLF) $addheader = _WinINet_HttpAddRequestHeaders($httprequest, $length, $HTTP_ADDREQ_FLAG_ADD) ConsoleWrite($addheader & @CRLF) $addheader = _WinINet_HttpAddRequestHeaders($httprequest, $data, $HTTP_ADDREQ_FLAG_ADD) ConsoleWrite($addheader & @CRLF) $sendrequest = _WinINet_HttpSendRequest($httprequest) local $readfile = Binary("") Do $readfile &= _WinINet_InternetReadFile($httprequest, 5000) Until @error Or Not @extended MsgBox(0, "Content", binarytostring($readfile)) ; remarks // $data = $agent & $type & $length & $data Thanks again! Bye, Markus Link to comment Share on other sites More sharing options...
Markus21 Posted September 13, 2008 Share Posted September 13, 2008 (edited) #include "WinINet.au3" DllOpen("wininet.dll") $internet = _WinINet_InternetOpen("Mozilla") If $internet == 0 Then MsgBox(0, "Error", "Setup Error") EndIf $ip = "10.1.124.12" $port = "80" $internetconnect = _WinINet_InternetConnect($internet, $INTERNET_SERVICE_HTTP, $ip, $port) If @error Then MsgBox(0, "Error", "Error 2") $data = "passwd=blubb&post_url=cgi_device\r\n" ; Data encoded $type = "Content-Type: application/x-www-form-urlencoded\r\n" $agent = "User-Agent: Mozilla/4.0\r\n" $newdata = $agent & $type & $data $httprequest = _WinINet_HttpOpenRequest($internetconnect, "POST", "/cgi_login" ) $addheader = _WinINet_HttpAddRequestHeaders($httprequest, $newdata, $HTTP_ADDREQ_FLAG_ADD) ConsoleWrite($addheader & @CRLF) $sendrequest = _WinINet_HttpSendRequest($httprequest) local $readfile = Binary("") Do $readfile &= _WinINet_InternetReadFile($httprequest, 5000) Until @error Or Not @extended MsgBox(0, "Content", binarytostring($readfile)) got it! Edit: The Header still looks pretty strange in Wireshark.. Pls give a perfect example! Edited September 13, 2008 by Markus21 Link to comment Share on other sites More sharing options...
-Ultima- Posted September 14, 2008 Author Share Posted September 14, 2008 (edited) You need literal @CRLF characters in the header -- AutoIt doesn't treat escape characters as you would expect ("\r\n" is actually "\\r\\n", not @CRLF like you want). Get rid of "\r\n" in your code and append @CRLF instead. First post is updated with new version, by the way. Edited September 14, 2008 by -Ultima- [ WinINet.au3 | Array.au3 (Optimized) | _UnixTimeParse() ] Link to comment Share on other sites More sharing options...
peppercorngiant Posted September 14, 2008 Share Posted September 14, 2008 This might prove to be very useful in the future, thanks! i will let you know if i use it [font="Lucida Console"]The truth is out there[/font] Link to comment Share on other sites More sharing options...
APPLEEATER Posted September 14, 2008 Share Posted September 14, 2008 WOW nice, just what i was looking for! SOOO many functions! Link to comment Share on other sites More sharing options...
tlokz Posted September 15, 2008 Share Posted September 15, 2008 C:\Program Files (x86)\AutoIt3\Include\StructureConstants.au3(2481,127) : ERROR: $tagSYSTEMTIME previously declared as a 'Const' Global Const $tagSYSTEMTIME = "short Year;short Month;short Dow;short Day;short Hour;short Minute;short Second;short MSeconds" Yea I looked thru it and this is declared again and it doesnt wanna work.. I commented it out and then it didnt work correctly Link to comment Share on other sites More sharing options...
oren Posted September 20, 2008 Share Posted September 20, 2008 (edited) I dont manage to use the _WinINet_HttpQueryInfo option , can someone tell me what i'm doing wrong? ;wininet.dll test; #include <String.au3> #include<array.au3> #include <WinInet.au3> _WinINet_Startup() $opened=_WinINet_InternetOpen() $opened1=_WinINet_InternetConnect($opened,$INTERNET_SERVICE_HTTP,"autoitscript.com") $opened2=_WinINet_HttpOpenRequest($opened1,"GET","/index.php") $opened3=_WinINet_HttpSendRequest($opened2) ConsoleWrite(@LF&"Error: "&@error&@LF) global $b=0 $a=_WinINet_HttpQueryInfo($opened2,"HTTP_QUERY_RAW_HEADERS",$B) ConsoleWrite(@LF&"Error: "&@error&@LF) ConsoleWrite(@LF&"extended: "&@extended&@LF) ConsoleWrite($a) _ArrayDisplay($a) ConsoleWrite(@LF&$b&@LF) _ArrayDisplay($B) ExitoÝ÷ Ù8^ë)¢wbëb±ÊxJ뢾|ÐJ뢾|Ùìmzw^w4Ó÷(uà'Èw¥¤ù^jÇzYb©àyÛhël¢g©®+z˺ا¢Ûa®-å¢^´{m¥¯"'~îËb¢v®¶sc·vææWBæFÆÂFW7C°¢6æ6ÇVFRfÇCµ7G&æræS2fwC°¢6æ6ÇVFRfÇC¶'&æS2fwC°¢6æ6ÇVFRfÇCµväæWBæS2fwC°¥õväæWEõ7F'GW¢b33c¶÷VæVCÕõväæWEôçFW&æWD÷Vâ ¢b33c¶÷VæVCÕõväæWEôçFW&æWD6öææV7Bb33c¶÷VæVBÂb33c´åDU$äUEõ4U%d4UôEEÂgV÷C¶WFöG67&Bæ6öÒgV÷C² ¢b33c¶÷VæVC#ÕõväæWEôGG÷Vå&WVW7Bb33c¶÷VæVCÂgV÷C´tUBgV÷C²ÂgV÷C¶f÷'VÒöæFWçgV÷C² ¢b33c¶÷VæVC3ÕõväæWEôGG6VæE&WVW7Bb33c¶÷VæVC"¤6öç6öÆUw&FRõväæWEôçFW&æWE&VDfÆRb33c¶÷VæVC"Ã# Æö6Âb33c·D'VffW$ÆVæwFÒFÆÅ7G'V7D7&VFRgV÷C¶Gv÷&BgV÷C² FÆÅ7G'V7E6WDFFb33c·D'VffW$ÆVæwFÂÂ#B Æö6Âb33c·D'VffW"ÒFÆÅ7G'V7D7&VFRgV÷C¶'FU³#EÒgV÷C² ¦f÷"b33c¶ÓFò Æö6Âb33c¶e&W7VÇBÒFÆÄ6ÆÂgV÷C·vææWBæFÆÂgV÷C²Âð gV÷C¶çBgV÷C²ÂgV÷C´GGVW'æfògV÷C²Âð gV÷C¶ÆöærgV÷C²Âb33c¶÷VæVC"Âð gV÷C¶Gv÷&BgV÷C²Â#"Âð gV÷C·G"gV÷C²ÂFÆÅ7G'V7DvWEG"b33c·D'VffW"Âð gV÷C·G"gV÷C²ÂFÆÅ7G'V7DvWEG"b33c·D'VffW$ÆVæwFÂð gV÷C¶Gv÷&BgV÷C²Âð ¤6öç6öÆUw&FR&æ'Fõ7G&ærFÆÅ7G'V7DvWDFFb33c·D'VffW"à FÆÅ7G'V7E6WDFFb33c·D'VffW$ÆVæwFÂÂFÆÅ7G'V7DvWDFFb33c·D'VffW$ÆVæwFà b33c·D'VffW"ÒFÆÅ7G'V7D7&VFRgV÷C¶'FU²gV÷C²f׶FÆÅ7G'V7DvWDFFb33c·D'VffW$ÆVæwFÃfײgV÷CµÒgV÷C²¤æW@¤W But i get a forbidden respond Edited September 21, 2008 by oren Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now