예제 #1
0
    long update() throws P2PDDSQLException {
      // System.out.println("=================================>update "+this);
      if (registered_ID <= 0) return this.storeNew();
      D_Directory_Storage.need_saving_remove(globalIDhash, instance); // need_saving = false;
      String params[] = new String[table.registered.fields_list.length];
      params[table.registered.REG_GID] = globalID;
      params[table.registered.REG_GID_HASH] = globalIDhash;
      params[table.registered.REG_INSTANCE] = instance;
      params[table.registered.REG_CERT] =
          (certificate.length == 0) ? null : Util.stringSignatureFromByte(certificate);
      params[table.registered.REG_ADDR] = Address.joinAddresses(addresses);
      params[table.registered.REG_SIGN] =
          (signature.length == 0) ? null : Util.stringSignatureFromByte(signature);
      if (timestamp == null) timestamp = Util.CalendargetInstance();
      params[table.registered.REG_TIME] =
          Encoder.getGeneralizedTime(
              timestamp); // (Util.CalendargetInstance().getTimeInMillis()/1000)+"";
      params[table.registered.REG_ID] = Util.getStringID(this.registered_ID);

      Application.db_dir.update(
          table.registered.TNAME,
          table.registered.fields_noID_list,
          new String[] {table.registered.registeredID},
          params,
          DEBUG);
      //					new
      // String[]{table.registered.global_peer_ID,table.registered.certificate,table.registered.addresses,table.registered.signature,table.registered.timestamp},
      return registered_ID;
    }
예제 #2
0
  private static byte[] _monitor_handleAnnouncement(
      DirectoryAnnouncement da, String detected_sa, DBInterface db, boolean storeNAT)
      throws P2PDDSQLException {
    if (DEBUG) System.out.println("Got announcement: " + da);
    if (da.getGID() != null)
      db.deleteNoSyncNULL(
          table.registered.TNAME,
          new String[] {table.registered.global_peer_ID, table.registered.instance},
          new String[] {da.getGID(), da.instance},
          DEBUG);
    else
      db.deleteNoSyncNULL(
          table.registered.TNAME,
          new String[] {table.registered.global_peer_ID_hash, table.registered.instance},
          new String[] {da.getGIDH(), da.instance},
          DEBUG);
    String adr = da.address.addresses();
    // da.address.domain+":"+da.address.port+ADDR_SEP+detected_sa,
    if (storeNAT) adr = Address.joinAddresses(detected_sa, adr);

    String params[] = new String[table.registered.fields_noID_list.length];
    params[table.registered.REG_GID] = da.getGID();
    params[table.registered.REG_GID_HASH] = da.getGIDH();
    params[table.registered.REG_INSTANCE] = da.instance;
    params[table.registered.REG_BRANCH] = da.branch;
    params[table.registered.REG_AGENT_VERSION] = Util.getVersion(da.agent_version);
    params[table.registered.REG_NAME] = da.name;
    params[table.registered.REG_CERT] =
        (da.certificate.length == 0) ? null : Util.stringSignatureFromByte(da.certificate);
    params[table.registered.REG_ADDR] = adr;
    params[table.registered.REG_SIGN] =
        (da.signature.length == 0) ? null : Util.stringSignatureFromByte(da.signature);
    Calendar timestamp = da.date;
    if (timestamp == null) timestamp = Util.CalendargetInstance();
    params[table.registered.REG_TIME] =
        Encoder.getGeneralizedTime(
            timestamp); // (Util.CalendargetInstance().getTimeInMillis()/1000)+"";

    long id =
        db.insert(
            table.registered.TNAME,
            table.registered.fields_noID_list,
            //				new
            // String[]{table.registered.global_peer_ID,table.registered.certificate,table.registered.addresses,table.registered.signature,table.registered.timestamp},
            params);
    if (DEBUG) out.println("DirectoryServer: mon_handleAnnoncement:inserted with ID=" + id);
    byte[] answer = new DirectoryAnnouncement_Answer(detected_sa).encode();
    if (DEBUG) out.println("sending answer: " + Util.byteToHexDump(answer));
    return answer;
  }
예제 #3
0
 @Override
 public Encoder getEncoder() {
   Encoder enc = new Encoder().initSequence();
   enc.addToSequence(new Encoder(instance));
   enc.addToSequence(new Encoder(branch));
   enc.addToSequence(Encoder.getEncoderArray(agent_version));
   if (date_last_contact == null) date_last_contact = Util.CalendargetInstance();
   enc.addToSequence(new Encoder(date_last_contact));
   enc.addToSequence(Encoder.getEncoder(instance_terms));
   enc.addToSequence(Encoder.getEncoder(addresses));
   enc.addToSequence(new Encoder(this.signature_peer));
   enc.setASN1Type(getASN1Type());
   return enc;
 }
예제 #4
0
 private void init(ArrayList<Object> d, D_DirectoryEntry _parent) {
   parent = _parent;
   this.registered_ID = Util.lval(d.get(table.registered.REG_ID));
   // this.addresses =
   // TypedAddress.parseStringAddresses(Util.getString(d.get(table.registered.REG_ADDR)));
   this.addresses = Address.getAddresses(Util.getString(d.get(table.registered.REG_ADDR)));
   this.certificate =
       Util.byteSignatureFromString(Util.getString(d.get(table.registered.REG_CERT)));
   this.globalID = Util.getString(d.get(table.registered.REG_GID));
   this.globalIDhash = Util.getString(d.get(table.registered.REG_GID_HASH));
   this.instance = Util.getString(d.get(table.registered.REG_INSTANCE));
   this.signature =
       Util.byteSignatureFromString(Util.getString(d.get(table.registered.REG_SIGN)));
   this.timestamp = Util.getCalendar(Util.getString(d.get(table.registered.REG_TIME)));
   if (timestamp == null) timestamp = Util.CalendargetInstance();
 }
예제 #5
0
  private static DirectoryAnswer getDA_old(D_DirectoryEntry de, DirectoryRequest dr, int version) {
    DirectoryAnswer da = new DirectoryAnswer();
    if (de.addresses == null) {
      return da;
    }
    da.version = version;
    da.date = de.timestamp;
    if (da.date == null) {
      da.date = Util.CalendargetInstance();
    }

    if (de.addresses != null)
      for (int k = 0; k < de.addresses.length; k++) {
        da.addresses.add(de.addresses[k]);
      }
    return da;
  }
예제 #6
0
	private void handleChoiceEvent(Object source) {
		//boolean DEBUG = true;
		if(DEBUG) out.println("JustificationEditor:handleFieldEvent: start");
		/*
		String creationTime;
		if(vote_date_field != null) {
			creationTime = vote_date_field.getText();
		}else{
			creationTime = Util.getGeneralizedTime();
		}
		*/
		if((this.vote_date_field==source)||(this.vote_date_field.getDocument()==source)) {
			if(DEBUG) out.println("JustificationEditor:handleFieldEvent: date title");
			String new_text = this.vote_date_field.getText();
			Calendar cal = Util.getCalendar(new_text);
			if(cal == null) return;
			this.signature.creation_date = cal;
			this.signature.setEditable();
			try {
				this.signature.storeVerified();
			} catch (P2PDDSQLException e) {
				e.printStackTrace();
			}
			return;			
		}
		if(this.vote_dategen_field==source) {
			this.signature.creation_date = Util.CalendargetInstance();
			this.vote_date_field.setText(Encoder.getGeneralizedTime(this.signature.creation_date));
			this.signature.setEditable();
			try {
				this.signature.storeVerified();
			} catch (P2PDDSQLException e) {
				e.printStackTrace();
			}
			return;			
		}
		if(this.vote_newjust_field==source) {
			if(DEBUG) out.println("VoteEditor:handleFieldEvent: choice newjust_radio");
			this.just_old_just_field.setEnabled(false);
			//setChoiceOldJustification(creationTime);
			//enable_just();
			if(motionEditor!=null){
				if(_DEBUG) out.println("VoteEditor:handleFieldEvent: choice newjust_radio, in motioneditor");
				motionEditor.enableNewJustification(true);
				signature.justification_ID = motionEditor.getNewJustificationID();
				signature.global_justification_ID = null;
			}else{
				if(_DEBUG) out.println("VoteEditor:handleFieldEvent: choice newjust_radio, in justeditor");
				this.justificationEditor.make_new();
				this.enable_just();
				signature.justification_ID = justification.justification_ID;
				signature.global_justification_ID = null;
			}
			return;
		}
		if(this.vote_oldjust_field==source) {
			if(DEBUG) out.println("VoteEditor:handleFieldEvent: choice oldjust_radio");
			this.just_old_just_field.setEnabled(true);
			setChoiceOldJustification();
			if(motionEditor!=null){
				motionEditor.enableNewJustification(false);
			}else{
				this.disable_just();
			}
			return;
		}
		if(this.vote_nojust_field==source) {
			if(DEBUG) out.println("VoteEditor:handleFieldEvent: choice nojust_radio");
			this.just_old_just_field.setEnabled(false);
			if(motionEditor!=null){
				motionEditor.enableNewJustification(false);
			}else{
				this.disable_just();
			}
			try{
				signature.justification_ID = null;
				signature.global_justification_ID = null;
				//this.signature.creation_date = Util.getCalendar(creationTime);
				this.signature.setEditable();
				this.signature.storeVerified();
			} catch (P2PDDSQLException e) {
				e.printStackTrace();
			}	
		}
		if(just_old_just_field==source) {
			if(DEBUG) out.println("VoteEditor:handleFieldEvent: choice old_just_combo");
			//if(DEBUG) Util.printCallPath("Linux tracing");
			setChoiceOldJustification();
			return;
		}
		if(this.vote_choice_field == source) {
			if(DEBUG) out.println("VoteEditor:handleFieldEvent: choice vote_choice_field combo");
			setChoice();
			return;
		}
		if((just_submit_field == source)) {
			if(DEBUG) out.println("VoteEditor:handleFieldEvent: submit");
			try {
				long j_id=-1;
				D_Justification justification =null;
				if(signature.choice==null){
					Application.warning(_("No voting choice made.\nPlease return and make a voting choice."), _("No Choice Made"));
					return;
				}
				if(vote_newjust_field.isSelected()) {
					if(DEBUG) out.println("VoteEditor:handleFieldEvent: new justification");
					justification = justificationEditor.just;
					if(motionEditor!=null){
						justification = motionEditor.getNewJustification();
						if(DEBUG) out.println("VoteEditor:handleFieldEvent: new justification from motionEditor="+justification);
					}else{
						if(DEBUG) out.println("VoteEditor:handleFieldEvent: new justification from justEditor="+justification);						
					}
					
					if(justification.global_constituent_ID==null){
						if(DEBUG) out.println("VoteEditor:handleFieldEvent: reget justification");
						justification.global_constituent_ID = Application.constituents.tree.getModel().getConstituentGIDMyself();
						justification.constituent_ID = Util.getStringID(Application.constituents.tree.getModel().getConstituentIDMyself());
						if(justification.global_constituent_ID==null) {
							Application.warning(_("You should first select a constituent identity for this organization!"), _("No Constituent ID for this org!"));
							return;
						}
					}

					
					justification.global_justificationID = justification.make_ID();
					justification.sign();
					j_id = justification.storeVerified(DEBUG);
					if(j_id<=0){
						if(_DEBUG) out.println("VoteEditor:handleFieldEvent: failed saving no new justif");
						return;					
					}
				}else{
					if(DEBUG) out.println("VoteEditor:handleFieldEvent: no new justification selected");
				}
				
				//signature = signature;
				//signature.global_motion_ID = null;
				//signature.motion_ID = justificationEditor.just.motion_ID;
				if(vote_newjust_field.isSelected()) {
					signature.global_justification_ID = justification.global_justificationID;
					signature.justification_ID = Util.getStringID(j_id);//justificationEditor.just.justification_ID;
				}
				signature.global_vote_ID = signature.make_ID();
				
				D_Vote old = new D_Vote(signature.global_vote_ID);
				if(old.vote_ID!=null){
					String old_date = Encoder.getGeneralizedTime(old.creation_date);
					String new_date = Encoder.getGeneralizedTime(signature.creation_date);
					if(old_date.equals(new_date)){
						int attack = Application.ask(
								_("Are you sure you want to create a new vote \n" +
								"with the same date as your previous vote? \n" +
								"This can amount to an attack where you give different people different votes!\n" +
								"Except if they order such votes by signature (to be implemented)\n" +
								"On selecting NO, we will update the creation date to now."),
								_("Votes from you on the same issue and with same date!"), JOptionPane.YES_NO_CANCEL_OPTION);
						switch(attack) {
						case 0: //YES
							break;
						case 1: // NO
							signature.creation_date = Util.CalendargetInstance();
							this.vote_date_field.setText(Encoder.getGeneralizedTime(this.signature.creation_date));
							break;
						case 2: // CANCEL
						default:
							return;
						}
					}
				}
				
				signature.sign();
				long v_id = this.signature.storeVerified();
				if(v_id<=0){
					if(_DEBUG) out.println("VoteEditor:handleFieldEvent: submit sign got no local ID");
					return;
				}
				
				/*
				justificationEditor.just.global_justificationID = justificationEditor.just.make_ID();
				justificationEditor.just.sign();
				long id = justificationEditor.just.storeVerified();
				if(id<=0) return;
				*/
				disable_it();
				justificationEditor.disable_it();
				try{
					D_Motion m = new D_Motion(Util.lval(signature.motion_ID));
					m.broadcasted = true;
					m.storeVerified();
				}catch(Exception e){e.printStackTrace();}
			} catch (P2PDDSQLException e) {
				e.printStackTrace();
			}
		}
	}
예제 #7
0
 /**
  * Check that date is less than 1 hour apart from now
  *
  * @param date
  * @return
  */
 private static boolean remoteDate(Calendar date) {
   return Math.abs(date.getTimeInMillis() - Util.CalendargetInstance().getTimeInMillis())
       > REMOTE_DATE_THRESHOLD_MILLIS;
 }
예제 #8
0
 public boolean older(long timeoutThread) {
   return Util.CalendargetInstance().getTimeInMillis() - this.startTime.getTimeInMillis()
       > timeoutThread;
 }
예제 #9
0
 public ServiceThread(String name, boolean daemon, Object ctx) {
   super(name, daemon, ctx);
   startTime = Util.CalendargetInstance();
 }