Package com.trendrr.strest.flash

Source Code of com.trendrr.strest.flash.FlashSocketPolicyServer

/**
*
*/
package com.trendrr.strest.flash;

import static org.jboss.netty.channel.Channels.pipeline;

import java.net.InetSocketAddress;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;

import com.trendrr.oss.DynMap;


/**
*
* This server handles falsh socket policy requests.  This allows you to use the flash bridge as a websocket connection for
* browsers that do not support websockets.
*
* see: http://www.lightsphere.com/dev/articles/flash_socket_policy.html
*
* Please note that on linux this must be run as root. 
* or you can forward via IPTABLES:
* $ iptables -t nat -A PREROUTING -p tcp --dport 843 -j REDIRECT --to-port 8430
*
*
* @author Dustin Norlander
* @created Apr 14, 2011
*
*/
public class FlashSocketPolicyServer {

  protected Log log = LogFactory.getLog(FlashSocketPolicyServer.class);
 
  public static void main(String ...strings) {
    FlashSocketPolicyServer.instance(new DynMap());
   
  }
  private ServerBootstrap bootstrap;
 
  public ServerBootstrap getBootstrap() {
    return this.bootstrap;
  }
 
  protected void init(DynMap config, Executor bossExecutor, Executor workerExecutor) {
     // Configure HTTP Ping server.
   
        this.bootstrap = new ServerBootstrap(
                new NioServerSocketChannelFactory(
                    bossExecutor,
                    workerExecutor));

        final DynMap cfg = config;
        // Set up the event pipeline factory.
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
     
      @Override
      public ChannelPipeline getPipeline() throws Exception {
        // Create a default pipeline implementation.
            ChannelPipeline pipeline = pipeline();

      
            pipeline.addLast("handler", new SocketPolicyHandler(cfg));
            return pipeline;
      }
    });

        // Bind and start to accept incoming connections.
        int port = config.getInteger("flashsocketpolicy.port", 843);
        try {
          bootstrap.bind(new InetSocketAddress(port));
        } catch (org.jboss.netty.channel.ChannelException x) {
          if (x.getCause() instanceof java.net.SocketException) {
            if (x.getCause().getMessage().equalsIgnoreCase("Permission denied")) {
              log.warn("!!! Unable to connect the Flash Policy server                 !!!");
              log.warn("*** Often ports below 1024 are only available to admins       ***");
              log.warn("*** trying running as sudo or enable internal port forwarding ***");
              log.warn("!!! Skipping Flash Policy Server                              !!!");
              return;
            }
          }
          throw x;
        }
        System.out.println("Flash Policy Server Ready and listening on port " + port);
   
  }
 
  /**
   * creates an instance of the flashbridge server based on the configuration file.
   *
   *
   * @param config
   * @return
   */
  public static FlashSocketPolicyServer instance(DynMap config, Executor bossExecutor, Executor workerExecutor) {
    FlashSocketPolicyServer server = new FlashSocketPolicyServer();
    if (bossExecutor == null ) {
      bossExecutor = Executors.newCachedThreadPool();
    }
    if (workerExecutor == null) {
      workerExecutor = Executors.newCachedThreadPool();
    }
    server.init(config, bossExecutor, workerExecutor);
    return server;
  }
 
  public static FlashSocketPolicyServer instance(DynMap config) {
    return instance(config, null, null);
  }
}
TOP

Related Classes of com.trendrr.strest.flash.FlashSocketPolicyServer

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.