Inetc plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(Undo revision 23272 by 94.23.238.222 (talk))
(ioGKAxRQPxKhboPQA)
Line 1: Line 1:
{{PageAuthor|Takhir}}
Great thinking! That really baerks the mold!
 
== Links ==
 
Download:<br>
<attach>Inetc.zip</attach><br>
 
[http://forums.winamp.com/showthread.php?threadid=198596 Forum thread]
 
Very true! Makes a canhge to see someone spell it out like that. :)
 
== Command line ==
 
Plug-in DLL functions (entry points): get, post, head, put
 
=== get DLL Function ===
 
<highlight-nsis>inetc::get [/PROXY IP:PORT] [/USERNAME PROXY_LOGIN /PASSWORD PROXY_PASSWD]
[/NOPROXY] [/NOCANCEL] [/CONNECTTIMEOUT TO_SEC]  [/RECEIVETIMEOUT TO_SEC] [/SILENT]
[/CAPTION TEXT] [/NOCOOKIES]  [/RESUME RETRY_QUESTION] [/POPUP HOST_ALIAS | /BANNER TEXT]
[/CANCELTEXT CANCEL_TEXT] [/QUESTION CANCEL_QUESTION] [/USER_AGENT USER_AGENT_TEXT]
[/HEADER HEADER_TEXT] [/TRANSLATE LANG_PARAMS]
URL1 local_file1 [URL2 local_file2 [...]] [/END]</highlight-nsis>
This call returns "OK" string if successful, error description string if failed (see included InetLoad.cpp file for a full set of status strings). Usage and result processing samples are included to the package.
 
; /PROXY
: Overwrites current proxy settings, not required in most cases. IE settings will be used by default.
 
; /USERNAME
: Proxy username (http only).
 
; /PASSWORD
: Proxy password (http only).  For server (http/ftp) authentication it is possible to use URL encoded name and password, for example <nowiki>http://username:password@nsis.sourceforge.net</nowiki>.
 
;/NOPROXY
: Disables proxy settings for this connection (if any)
 
;/NOCANCEL
: Prevents download from being interrupted by user (locks Esc, Alt-F4, Cancel handling)
 
;/CONNECTTIMEOUT -
:Sets INTERNET_OPTION_CONNECT_TIMEOUT, seconds, default - IE current parameter value.
 
;/RECEIVETIMEOUT -
:Sets INTERNET_OPTION_RECEIVE_TIMEOUT, seconds, default - IE current parameter value.
 
; /SILENT
: Key hides plug-in' output (both popup dialog and embedded progress bar). Not required if 'SilentInstall silent' mode was defined in script (NSIS 2.03 or later).
 
; /RESUME
: On the permanent connection/transfer error instead of exit first displays message box with "resume download" question. Useful for dial-up connections and big files - allows user to restore connection and resume download. Default is "Your internet connection seems to have dropped out!\nPlease reconnect and click Retry to resume downloading...".
 
; /CAPTION
: Defines caption text for /BANNER mode, caption prefix (left of '-') for /POPUP mode and caption for RESUME MessageBox. Default is "InetLoad plug-in" if not set or "".
 
; /POPUP
: This mode displays detailed download dialog instead of embedded progress bar. Also useful in .onInit function (i.e. not in Section). If HOST_ALIAS is not "", text will replace URL in the dialog - this allows to hide real URL (including password).
 
; /BANNER
: Displays simple popup dialog (MSI Banner mode) and sets dialog TEXT (up to 3 lines using $\n).
 
; /CANCELTEXT
: Text for the Cancel button in the NSISdl mode. Default is NSIS dialog Cancel button text (current lang).
 
; /QUESTION
: Text for the optional MessageBox if user tries to cancel download. If /QUESTION "" was used default "Are you sure that you want to stop download?" will be substituted.
 
; /USERAGENT
: UserAgent http request header value. Default is "NSIS_Inetc (Mozilla)".
 
; /HEADER
: Adds or replaces http request header. Common HEADER_TEXT format is "header: value".
 
; /NOCOOKIES
: Removes cookies from http request
 
; /END
: Allows to limit plug-in stack reading (optional, required if you stores other vars in the stack).
 
; /TRANSLATE
: Allows translating plug-in text in the POPUP or "old style" (NSISdl) modes (see Readme for parameters). In the BANNER mode text is also customizable.
 
=== post DLL Function ===
 
<highlight-nsis>inetc::post TEXT2POST [/PROXY IP:PORT] [/USERNAME PROXY_LOGIN  /PASSWORD PROXY_PASSWD]
[/NOPROXY] [/NOCANCEL] [/CONNECTTIMEOUT TO_SEC]  [/RECEIVETIMEOUT TO_SEC] [/SILENT]
[/FILE] [/CAPTION TEXT] [/NOCOOKIES] [/POPUP HOST_ALIAS | /BANNER TEXT]
[/CANCELTEXT CANCEL_TEXT] [/USER_AGENT USER_AGENT_TEXT] [/TRANSLATE LANG_PARAMS]
URL1 local_file1 [URL2 local_file2 [...]] [/END]</highlight-nsis>
Sets POST http mode and defines text string or file name to be used in the POST (http only). Disables auto re-get. No char replaces used (%20 and others). /FILE option allows to send TEXT2POST file content to server, additional 'Filename:' header added to request this case.
 
For example
<highlight-nsis>inetc::post "$1" /file "<url to some webserver>/catch.pl" "$2"</highlight-nsis>
will post the contents of file $1  to the catch.pl script on the webserver and it will store the output of that script in the local file $2
The perl script catch.pl has the following lines to get the POSTed file:
    if ($ENV{'REQUEST_METHOD'} eq "POST")
    {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    }
 
In the cgi script, the HTTP environment variable HTTP_FILENAME will contain the filename as supplied in $1
 
=== head DLL Function ===
 
The same as get, but requests http headers only. Writes raw headers to file.
 
=== put DLL Function ===
 
<highlight-nsis>inetc::put [/PROXY IP:PORT] [/USERNAME PROXY_LOGIN /PASSWORD PROXY_PASSWD] [/NOPROXY]
[/NOCANCEL] [/CONNECTTIMEOUT TO_SEC]  [/RECEIVETIMEOUT TO_SEC] [/SILENT] [/CAPTION TEXT]
[/POPUP HOST_ALIAS | /BANNER TEXT] [/CANCELTEXT CANCEL_TEXT] [/USER_AGENT USER_AGENT_TEXT]
[/TRANSLATE LANG_PARAMS] [/NOCOOKIES]
URL1 local_file1 [URL2 local_file2 [...]] [/END]</highlight-nsis>
Return value and parameters (if applicable) are the same as for previous entry point.
 
== Examples ==
 
<highlight-nsis>
inetc::get "http://dl.zvuki.ru/6306/mp3/12.mp3" "$EXEDIR\12.mp3" \
              "ftp://dl.zvuki.ru/6306/mp3/11.mp3" "$EXEDIR\11.mp3"
Pop $0
</highlight-nsis>
 
<highlight-nsis>
inetc::put /BANNER "Cameron Diaz upload in progress..." \
"http://www.dreamgirlswallpaper.co.uk/fiveyearsonline/wallpaper/Cameron_Diaz/camerond09big.JPG" \
"$EXEDIR\cd.jpg"
  Pop $0
  StrCmp $0 "OK" dlok
  MessageBox MB_OK|MB_ICONEXCLAMATION "http upload Error, click OK to abort installation" /SD IDOK
  Abort
dlok:
  ...
</highlight-nsis>
 
<highlight-nsis>
;installer window restoring after silent calls from .onGUIInit
;by Edward Marshall & Jonathan Beddoes
;temporarily makes the installer window topmost so that inetc doesn't drop our focus
 
Function .onGUIInit
 
  ; Get window handle of installer into register 0.
  ; This only works in onGUIInit! (so you still can't silently call inetc from onInit)
  StrCpy $0 $HWNDPARENT
 
  ; Make window always-on-top. Yes, this is bad but we are only doing it temporarily!
  ; This prevents inetc's hidden dialog from getting foreground precedence over the installer.
  ; This must be done before any inetc calls.
  ; -1 = HWND_TOPMOST, 3 = SWP_NOSIZE|SWP_NOMOVE
  System::Call "user32::SetWindowPos(i r0, i -1, i 0, i 0, i 0, i 0, i 3)"
 
  ; Now do whatever you want with inetc.
  inetc::head /silent "http://ineum.narod.ru/spr_2006.htm" "$EXEDIR\head.txt"
 
  ; Now set the installer window back to normal (not always-on-top).
  ; -2 = HWND_NOTOPMOST, 3 = SWP_NOSIZE|SWP_NOMOVE
  System::Call "user32::SetWindowPos(i r0, i -2, i 0, i 0, i 0, i 0, i 3)"
 
FunctionEnd
</highlight-nsis>
<highlight-nsis>
; Following attribute also can restore installer Window
; BGGradient 000000 000080 FFFFFF
</highlight-nsis>
 
 
== Limitations and warnings ==
 
* Has a verified risk of causing a false positive for "generic downloader trojan" in Kasperky antivirus software.
 
== Credits ==
 
Many thanks to Backland who offered a simple way to fix NSISdl mode crashes, added 'center parent' function, offers few nice design ideas and spent a lot of time testing the plug-in.
 
[[Category:Plugins]]

Revision as of 18:48, 15 May 2013

Great thinking! That really baerks the mold!