def httpin_delivery(self, rcpt, objname, recordid): name = objname item = get_item(name, True) if item is None: #could not find item to look up its deliverer. return an error logging.error( 'Error, Paid item %s not found yet was found before. Requested by %s using %s.' % (name, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) self.error(403) return name_version = "%s - %s" % (name, item['version']) if item['givers'] == []: logging.error('Error, Paid item %s does not have http urls.' % (name)) self.error(403) return givers = item['givers'] #need to add a way to rotate the urls url_token = 'url_%s' % name url = '' url_num = 0 for _i in range(3): #will move the code here to compact it instead of the else and ifs url_num = memcache.incr(url_token, initial_value=0) url_num = url_num % ((len(givers))) url_cached = True count_token = 'item_count_%s' % name memcache.incr(count_token, initial_value=0) deliv_url_token = 'deliv_url_%s' % givers[url_num] cacheddist = memcache.get(deliv_url_token) if cacheddist is None: deliv = Deliver.get_by_key_name("Deliv:%s" % givers[url_num]) if deliv is None: #could not find item deliverer. remove_item_url(name, givers[url_num]) continue else: url_cached = False url = deliv.url memcache.set(deliv_url_token, deliv.url) else: url = cacheddist logging.debug("Tring to send %s to %s using deliver %s" % (name, rcpt, givers[url_num])) result = urlfetch.fetch(url, method="POST", payload="%s|%s" % (name_version, rcpt), headers={}, deadline=10) if result.content == "sent": #record = Purchases(purchaser = rcpt, item = name, seller = self.request.headers['X-SecondLife-Owner-Key'], item_reciver = 'request', loc = '%s %s' % (self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position']), vender_name = self.request.headers['X-SecondLife-Object-Name'], amount_paid = paid) #have the vendor transfer the money return 'sent|%s|%s|%s' % (rcpt, name_version, recordid ) #do we need all of this? elif result.status_code == 410: #the item is not in that box remove the box from that item remove_item_url(name, givers[url_num]) elif result.status_code == 404: if url_cached: deliv = Deliver.get_by_key_name("Deliv:%s" % givers[url_num]) if deliv is None: #check for no results. remove_item_url(name, givers[url_num]) elif url != deliv.url: #try again as the url was out of date url_cached = False memcache.set(deliv_url_token, deliv.url) url = deliv.url else: remove_item_url(name, givers[url_num]) else: remove_item_url(name, givers[url_num]) else: logging.error( 'Error, item %s did not get sent by %s may try again. Status %s Message from vendor: %s' % (name_version, givers[url_num], result.status_code, result.content)) else: logging.error( 'Error, Paid item %s did not get sent. Status %s Message from vendor: %s' % (name_version, result.status_code, result.content)) self.error(403)
def httpin_delivery(self, rcpt, objname, recordid): name = objname item = get_item(name, True) if item is None: #could not find item to look up its deliverer. return an error logging.error('Error, Paid item %s not found yet was found before. Requested by %s using %s.' % (name, self.request.headers['X-SecondLife-Owner-Name'], self.request.headers['X-SecondLife-Object-Name'])) self.error(403) return name_version = "%s - %s" % (name, item['version']) if item['givers'] == []: logging.error('Error, Paid item %s does not have http urls.' % (name)) self.error(403) return givers = item['givers'] #need to add a way to rotate the urls url_token = 'url_%s' % name url = '' url_num = 0 for _i in range(3): #will move the code here to compact it instead of the else and ifs url_num = memcache.incr(url_token, initial_value=0) url_num = url_num % ((len(givers))) url_cached = True count_token = 'item_count_%s' % name memcache.incr(count_token, initial_value=0) deliv_url_token = 'deliv_url_%s' % givers[url_num] cacheddist = memcache.get(deliv_url_token) if cacheddist is None: deliv = Deliver.get_by_key_name("Deliv:%s" % givers[url_num]) if deliv is None: #could not find item deliverer. remove_item_url(name, givers[url_num]) continue else: url_cached = False url = deliv.url memcache.set(deliv_url_token, deliv.url) else: url = cacheddist logging.debug("Tring to send %s to %s using deliver %s" % (name, rcpt, givers[url_num])) result = urlfetch.fetch(url, method="POST", payload="%s|%s" % (name_version, rcpt) , headers={}, deadline = 10) if result.content == "sent": #record = Purchases(purchaser = rcpt, item = name, seller = self.request.headers['X-SecondLife-Owner-Key'], item_reciver = 'request', loc = '%s %s' % (self.request.headers['X-SecondLife-Region'], self.request.headers['X-SecondLife-Local-Position']), vender_name = self.request.headers['X-SecondLife-Object-Name'], amount_paid = paid) #have the vendor transfer the money return 'sent|%s|%s|%s' % (rcpt, name_version, recordid)#do we need all of this? elif result.status_code == 410: #the item is not in that box remove the box from that item remove_item_url(name, givers[url_num]) elif result.status_code == 404: if url_cached: deliv = Deliver.get_by_key_name("Deliv:%s" % givers[url_num]) if deliv is None: #check for no results. remove_item_url(name, givers[url_num]) elif url != deliv.url: #try again as the url was out of date url_cached = False memcache.set(deliv_url_token, deliv.url) url = deliv.url else: remove_item_url(name, givers[url_num]) else: remove_item_url(name, givers[url_num]) else: logging.error('Error, item %s did not get sent by %s may try again. Status %s Message from vendor: %s' % (name_version, givers[url_num], result.status_code, result.content)) else: logging.error('Error, Paid item %s did not get sent. Status %s Message from vendor: %s' % (name_version, result.status_code, result.content)) self.error(403)