source: trunk/download_mirror.nsh @ 824

Revision 824, 4.0 KB checked in by beliar, 9 years ago (diff)

Patch by Beliar

setup.nsi:

  • Readded FIFE to externals. It will be downloaded from a random mirror of 10 preselected mirros.
Line 
1var RandomSeed          # The seed for the random number generator
2 
3###############################################################
4#
5# Returns a random number
6#
7# Usage:
8#       Push Seed (or previously generated number)
9#       Call RandomNumber
10#       Pop Generated Random Number
11Function RandomNumber
12        Exch $R0
13 
14        IntOp $R0 $R0 * "13"
15        IntOp $R0 $R0 + "3"
16        IntOp $R0 $R0 % "1048576" # Values goes from 0 to 1048576 (2^20)
17 
18        Exch $R0
19FunctionEnd
20 
21####################################################
22#
23# Returns a random number between 0 and MaxValue-1
24#
25# Usage:
26#       Push Seed (or previously generated number)
27#       Push MaxValue
28#       Call RandomNumber
29#       Pop Generated Random Number
30#       Pop NewSeed
31Function LimitedRandomNumber
32        Exch $R0
33        Exch
34        Exch $R1
35        Push $R2
36        Push $R3
37 
38        StrLen $R2 $R0
39        Push $R1
40RandLoop:
41        Call RandomNumber
42        Pop $R1 #Random Number
43        IntCmp $R1 $R0 0 NewRnd
44        StrLen $R3 $R1 
45        IntOp $R3 $R3 - $R2
46        IntOp $R3 $R3 / "2"
47        StrCpy $R3 $R1 $R2 $R3
48        IntCmp $R3 $R0 0 RndEnd
49NewRnd:
50        Push $R1
51        Goto RandLoop
52RndEnd:
53        StrCpy $R0 $R3
54        IntOp $R0 $R0 + "0" #removes initial 0's
55        Pop $R3
56        Pop $R2
57        Exch $R1
58        Exch
59        Exch $R0
60FunctionEnd
61
62###################################################
63#
64# Downloads a file from a list of mirrors
65# (the fist mirror is selected at random)
66#
67# Usage:
68#       Push Mirror1
69#       [Push Mirror2]
70#       ...
71#       [Push Mirror10]
72#       Push NumMirrors         # 10 Max
73#       Push FileName
74#       Call DownloadFromRandomMirror
75#       Pop Return
76#
77#       Returns the last NSISdl result
78Function DownloadFromRandomMirror
79        Exch $R1 #File name
80        Exch
81        Exch $R0 #Number of Mirrors
82        Push $0
83        Exch 3
84        Pop $0  #Mirror 1
85        IntCmpU "2" $R0 0 0 +4
86                Push $1
87                Exch 4
88                Pop $1  #Mirror 2
89        IntCmpU "3" $R0 0 0 +4
90                Push $2
91                Exch 5
92                Pop $2  #Mirror 3
93        IntCmpU "4" $R0 0 0 +4
94                Push $3
95                Exch 6
96                Pop $3  #Mirror 4
97        IntCmpU "5" $R0 0 0 +4
98                Push $4
99 
100                Exch 7
101                Pop $4  #Mirror 5
102        IntCmpU "6" $R0 0 0 +4
103                Push $5
104                Exch 8
105                Pop $5  #Mirror 6
106        IntCmpU "7" $R0 0 0 +4
107                Push $6
108                Exch 9
109                Pop $6  #Mirror 7
110        IntCmpU "8" $R0 0 0 +4
111                Push $7
112                Exch 10
113                Pop $7  #Mirror 8
114        IntCmpU "9" $R0 0 0 +4
115                Push $8
116                Exch 11
117                Pop $8  #Mirror 9
118        IntCmpU "10" $R0 0 0 +4
119                Push $9
120                Exch 12
121                Pop $9  #Mirror 10
122        Push $R4
123        Push $R2
124        Push $R3
125        Push $R5
126        Push $R6
127 
128        StrCmp $RandomSeed "" 0 +2
129                StrCpy $RandomSeed $HWNDPARENT   #init RandomSeed
130 
131        Push $RandomSeed
132        Push $R0
133        Call LimitedRandomNumber
134        Pop $R3
135        Pop $RandomSeed
136 
137        StrCpy $R5 "0"
138MirrorsStart:
139        IntOp $R5 $R5 + "1"
140        StrCmp $R3 "0" 0 +3
141                StrCpy $R2 $0
142                Goto MirrorsEnd
143        StrCmp $R3 "1" 0 +3
144                StrCpy $R2 $1
145                Goto MirrorsEnd
146        StrCmp $R3 "2" 0 +3
147                StrCpy $R2 $2
148                Goto MirrorsEnd
149        StrCmp $R3 "3" 0 +3
150                StrCpy $R2 $3
151                Goto MirrorsEnd
152        StrCmp $R3 "4" 0 +3
153                StrCpy $R2 $4
154                Goto MirrorsEnd
155        StrCmp $R3 "5" 0 +3
156                StrCpy $R2 $5
157                Goto MirrorsEnd
158        StrCmp $R3 "6" 0 +3
159                StrCpy $R2 $6
160                Goto MirrorsEnd
161        StrCmp $R3 "7" 0 +3
162                StrCpy $R2 $7
163                Goto MirrorsEnd
164        StrCmp $R3 "8" 0 +3
165                StrCpy $R2 $8
166                Goto MirrorsEnd
167        StrCmp $R3 "9" 0 +3
168                StrCpy $R2 $9
169                Goto MirrorsEnd
170        StrCmp $R3 "10" 0 +3
171                StrCpy $R2 $10
172                Goto MirrorsEnd
173 
174MirrorsEnd:
175        IntOp $R6 $R3 + "1"
176        DetailPrint "Downloading from mirror $R6: $R2"
177 
178        NSISdl::download "$R2" "$R1"
179        Pop $R4
180        StrCmp $R4 "success" Success
181        StrCmp $R4 "cancel" DownloadCanceled
182        IntCmp $R5 $R0 NoSuccess
183        DetailPrint "Download failed (error $R4), trying with other mirror"
184        IntOp $R3 $R3 + "1"
185        IntCmp $R3 $R0 0 MirrorsStart
186        StrCpy $R3 "0"
187        Goto MirrorsStart
188 
189DownloadCanceled:
190        DetailPrint "Download Canceled: $R2"
191        Goto End
192NoSuccess:             
193        DetailPrint "Download Failed: $R1"
194        Goto End
195Success:
196        DetailPrint "Download completed."
197End:
198        Pop $R6
199        Pop $R5
200        Pop $R3
201        Pop $R2
202        Push $R4
203        Exch
204        Pop $R4
205        Exch 2
206        Pop $R1
207        Exch 2
208        Pop $0
209        Exch
210 
211        IntCmpU "2" $R0 0 0 +4
212                Exch 2 
213                Pop $1
214                Exch
215        IntCmpU "3" $R0 0 0 +4
216                Exch 2 
217                Pop $2
218                Exch
219        IntCmpU "4" $R0 0 0 +4
220                Exch 2 
221                Pop $3
222                Exch
223        IntCmpU "5" $R0 0 0 +4
224                Exch 2 
225                Pop $4
226                Exch
227        IntCmpU "6" $R0 0 0 +4
228                Exch 2 
229                Pop $5
230                Exch
231        IntCmpU "7" $R0 0 0 +4
232                Exch 2 
233                Pop $6
234                Exch
235        IntCmpU "8" $R0 0 0 +4
236                Exch 2 
237                Pop $7
238                Exch
239        IntCmpU "9" $R0 0 0 +4
240                Exch 2 
241                Pop $8
242                Exch
243        IntCmpU "10" $R0 0 0 +4
244                Exch 2 
245                Pop $9
246                Exch
247        Pop $R0
248FunctionEnd
249
Note: See TracBrowser for help on using the repository browser.