| 
					
				 | 
			
			
				@@ -87,10 +87,12 @@ purpose_is_private(uint8_t purpose) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * connection purpose 'purpose' and uploading the payload 'payload' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * (length 'payload_len').  The purpose should be one of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 'DIR_PURPOSE_UPLOAD_DIR' or 'DIR_PURPOSE_UPLOAD_RENDDESC'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * DOCDOC extrainfo_len is in addition to payload_len. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 directory_post_to_dirservers(uint8_t purpose, const char *payload, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             size_t payload_len) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             size_t payload_len, size_t extrainfo_len) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   smartlist_t *dirservers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int post_via_tor; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,6 +108,9 @@ directory_post_to_dirservers(uint8_t purpose, const char *payload, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SMARTLIST_FOREACH(dirservers, trusted_dir_server_t *, ds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       routerstatus_t *rs = &(ds->fake_status.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      local_routerstatus_t *lrs = router_get_combined_status_by_digest( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                ds->digest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      size_t upload_len = payload_len; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (post_to_hidserv_only && !ds->is_hidserv_authority) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (!post_to_hidserv_only && 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -113,10 +118,17 @@ directory_post_to_dirservers(uint8_t purpose, const char *payload, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (purpose == DIR_PURPOSE_UPLOAD_DIR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ds->has_accepted_serverdesc = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (extrainfo_len && lrs && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          lrs->status.version_supports_extrainfo_upload) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        upload_len += extrainfo_len; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /* XXXX020 Disable this once it's tested. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log_notice(LD_DIR, "I am going to try to upload an extrainfo. How " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   "exciting! (length %d)", (int) extrainfo_len); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       post_via_tor = purpose_is_private(purpose) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               !fascist_firewall_allows_address_dir(ds->addr, ds->dir_port); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       directory_initiate_command_routerstatus(rs, purpose, post_via_tor, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                              NULL, payload, payload_len); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              NULL, payload, upload_len); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |