returns a Curl handle ready to use for perform/multiperform
(self)
| 162 | return self.p.cj |
| 163 | |
| 164 | def getHandle(self): |
| 165 | """ returns a Curl handle ready to use for perform/multiperform """ |
| 166 | |
| 167 | self.setRequestContext(self.p.url, self.p.get, self.p.post, self.p.referer, self.p.cj) |
| 168 | self.c.setopt(pycurl.WRITEFUNCTION, self.writeBody) |
| 169 | self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader) |
| 170 | |
| 171 | # request all bytes, since some servers in russia seems to have a defect arihmetic unit |
| 172 | |
| 173 | fs_name = fs_encode(self.p.info.getChunkName(self.id)) |
| 174 | if self.resume: |
| 175 | self.fp = open(fs_name, "ab") |
| 176 | self.arrived = self.fp.tell() |
| 177 | if not self.arrived: |
| 178 | self.arrived = os.stat(fs_name).st_size |
| 179 | |
| 180 | if self.range: |
| 181 | # do nothing if chunk already finished |
| 182 | if self.arrived + self.range[0] >= self.range[1]: return None |
| 183 | |
| 184 | if self.id == len(self.p.info.chunks) - 1: # as last chunk dont set end range, so we get everything |
| 185 | range = "%i-" % (self.arrived + self.range[0]) |
| 186 | else: |
| 187 | range = "%i-%i" % (self.arrived + self.range[0], min(self.range[1] + 1, self.p.size - 1)) |
| 188 | |
| 189 | self.log.debug("Chunked resume with range %s" % range) |
| 190 | self.c.setopt(pycurl.RANGE, range) |
| 191 | else: |
| 192 | self.log.debug("Resume File from %i" % self.arrived) |
| 193 | self.c.setopt(pycurl.RESUME_FROM, self.arrived) |
| 194 | |
| 195 | else: |
| 196 | if self.range: |
| 197 | if self.id == len(self.p.info.chunks) - 1: # see above |
| 198 | range = "%i-" % self.range[0] |
| 199 | else: |
| 200 | range = "%i-%i" % (self.range[0], min(self.range[1] + 1, self.p.size - 1)) |
| 201 | |
| 202 | self.log.debug("Chunked with range %s" % range) |
| 203 | self.c.setopt(pycurl.RANGE, range) |
| 204 | |
| 205 | self.fp = open(fs_name, "wb") |
| 206 | |
| 207 | return self.c |
| 208 | |
| 209 | def writeHeader(self, buf): |
| 210 | self.header += buf |
no test coverage detected