Package com.aelitis.azureus.core.messenger.config

Source Code of com.aelitis.azureus.core.messenger.config.PlatformSubscriptionsMessenger$subscriptionInfo

/*
* Created on May 6, 2008
* Created by Paul Gardner
*
* Copyright 2008 Vuze, Inc.  All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License only.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/


package com.aelitis.azureus.core.messenger.config;

import java.security.Signature;
import java.util.*;

import org.gudy.azureus2.core3.util.Base32;
import org.gudy.azureus2.core3.util.ByteFormatter;
import org.json.simple.JSONArray;


import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.messenger.PlatformMessengerException;
import com.aelitis.azureus.core.security.CryptoECCUtils;

public class
PlatformSubscriptionsMessenger
{
  private static final boolean  MESSAGING_ENABLED = true;
 
  private static final PlatformMessengerConfig  dispatcher =
    new PlatformMessengerConfig( "subscription", false );

  private static final String OP_CREATE_SUBS          = "create-subscription";
  private static final String OP_UPDATE_SUBS          = "update-subscription";
  private static final String OP_GET_SUBS_BY_SID        = "get-subscriptions";
  private static final String OP_GET_POP_BY_SID        = "get-subscription-infos";
  private static final String OP_SET_SELECTED          = "set-selected";

  public static void
  updateSubscription(
    boolean    create,
    String    name,
    byte[]    public_key,
    byte[]    private_key,
    byte[]    sid,
    int      version,
    String    content )
 
    throws PlatformMessengerException
  {
    String operation = create?OP_CREATE_SUBS:OP_UPDATE_SUBS;
   
    checkEnabled( operation );
   
    Map parameters = new HashMap();
   
    String  sid_str = Base32.encode( sid );
    String  pk_str  = Base32.encode(public_key) ;
   
    parameters.put( "name", name );
    parameters.put( "subscription_id", sid_str );
    parameters.put( "version_number", new Long( version ));
    parameters.put( "content", content );       
   
    if ( create ){
     
      parameters.put( "public_key", pk_str );
    }
   
    try{
      Signature sig = CryptoECCUtils.getSignature( CryptoECCUtils.rawdataToPrivkey( private_key ));

      sig.update( ( name + pk_str + sid_str + version + content ).getBytes( "UTF-8" ));
     
      byte[]  sig_bytes = sig.sign();
     
      /*
      Signature verify = CryptoECCUtils.getSignature( CryptoECCUtils.rawdataToPubkey( public_key ));

      verify.update( ( name + pk_str + sid_str + version + content ).getBytes( "UTF-8" ));
     
      boolean ok = verify.verify( sig_bytes );
      */
     
      parameters.put( "signature", Base32.encode( sig_bytes ));

      dispatcher.syncInvoke( operation, parameters );
     
    }catch( Throwable e ){
     
      throw( new PlatformMessengerException( "Failed to create/update subscription", e ));
    }
  }
 
  public static subscriptionDetails
  getSubscriptionBySID(
    byte[]    sid )
 
    throws PlatformMessengerException
  {
    checkEnabled( OP_GET_SUBS_BY_SID );
   
    Map parameters = new HashMap();
   
    List  sid_list = new JSONArray();

    sid_list.add( Base32.encode( sid ));
   
    parameters.put( "subscription_ids", sid_list);
   
    Map reply = dispatcher.syncInvokeOP_GET_SUBS_BY_SID, parameters );

    for (int i=0;i<sid_list.size();i++){
     
      Map  map = (Map)reply.get((String)sid_list.get(i));
     
      if ( map != null ){
       
        subscriptionDetails details = new subscriptionDetails( map );
       
        return( details );
      }
    }
   
    throw( new PlatformMessengerException( "Unknown sid '" + ByteFormatter.encodeString(sid) + "'" ));
  }                        
 
  public static long
  getPopularityBySID(
    byte[]    sid )
 
    throws PlatformMessengerException
  {
    checkEnabled( OP_GET_POP_BY_SID );
   
    Map parameters = new HashMap();
   
    List  sid_list = new JSONArray();
   
    sid_list.add( Base32.encode( sid ));
         
    parameters.put( "subscription_ids", sid_list );
   
    Map reply = dispatcher.syncInvokeOP_GET_POP_BY_SID, parameters );
   
    for (int i=0;i<sid_list.size();i++){
     
      Map  map = (Map)reply.get((String)sid_list.get(i));
     
      if ( map != null ){
       
        subscriptionInfo info = new subscriptionInfo( map );
       
        return( info.getPopularity());
      }
    }
   
    return( -1 );
  }
 
  public static List[]
  setSelected(
    List  sids )
 
    throws PlatformMessengerException
  {
    checkEnabled( OP_SET_SELECTED );
   
    Map parameters = new HashMap();
   
    List  sid_list   = new JSONArray();   
    for (int i=0;i<sids.size();i++){
   
      sid_list.add( Base32.encode( (byte[])sids.get(i) ));
    }
   
    parameters.put( "subscription_ids", sid_list);
   
    Map reply = dispatcher.syncInvoke( OP_SET_SELECTED, parameters );
   
    List  versions = (List)reply.get( "version_numbers" );
   
    if ( versions == null ){
     
      // test
     
      versions = new ArrayList();
     
      for (int i=0;i<sids.size();i++){
       
        versions.add( new Long(1));
      }
    }
   
    List  popularities = (List)reply.get( "popularities" );
   
    if ( popularities == null ){
     
        // migrate
     
      popularities = new ArrayList();
     
      for (int i=0;i<sids.size();i++){
       
        versions.add( new Long(-1));
      }
    }
 
    return( new List[]{ versions,popularities } );
  }  
 
  protected static void
  checkEnabled(
    String    method )
 
    throws PlatformMessengerException
  {
    if ( !MESSAGING_ENABLED ){
     
      throw( new PlatformMessengerException( "messaging disabled" ));
    }
  }
 
  public static class
  subscriptionInfo
  {
    private Map    info;
   
    protected
    subscriptionInfo(
      Map    _info )
    {
      info  = _info;
    }
   
    public long
    getPopularity()
    {
      return(((Long)info.get( "popularity" )).intValue());
    }
  }
 
  public static class
  subscriptionDetails
  {
    private Map    details;
   
    protected
    subscriptionDetails(
      Map    _details )
    { 
      details = _details;
    }
   
    public String
    getName()
    {
      return( getString( "name" ));
    }
   
    public String
    getContent()
    {
      return( getString( "content" ));
    }
   
    public int
    getPopularity()
    {
      Long  l_pop = (Long)details.get( "popularity" );
     
      if ( l_pop != null ){
       
        return( l_pop.intValue());
      }
     
      return( -1 );
    }
   
    protected String
    getString(
      String  key )
    {
      Object obj = details.get( key );
     
      if ( obj instanceof String ){
       
        return((String)obj);
       
      }else if ( obj instanceof byte[] ){
         
        byte[]  bytes = (byte[])obj;
       
        try{
          return( new String( bytes, "UTF-8" ));
         
        }catch( Throwable e ){
         
          return( new String( bytes ));
        }
      }else{
       
        return( null );
      }
    }
  }
 
  public static void
  main(
    String[]  args )
  {
    try{
      AzureusCoreFactory.create();
     
      String short_id = "";
     
      long res = getPopularityBySID( Base32.decode( short_id ));
     
      System.out.println( res );
     
    }catch( Throwable e ){
     
      e.printStackTrace();
    }
  }
}
TOP

Related Classes of com.aelitis.azureus.core.messenger.config.PlatformSubscriptionsMessenger$subscriptionInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.