package com.jcumulus.server.rtmfp.publisher; /** * jCumulus is a Java port of Cumulus OpenRTMP * * Copyright 2011 OpenRTMFP * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 received along this program for more * details (or else see http://www.gnu.org/licenses/). * * * This file is a part of jCumulus. */ import com.jcumulus.server.rtmfp.packet.*; import com.jcumulus.server.rtmfp.ISession; import com.jcumulus.server.rtmfp.Peer; import com.jcumulus.server.rtmfp.application.Publication; import com.jcumulus.server.rtmfp.application.C; import java.util.Collection; import java.util.Iterator; import java.util.Map; import org.apache.log4j.Logger; public class A extends com.jcumulus.server.rtmfp.publisher.E { static enum _A { IDLE, PUBLISHING, PLAYING } private static final Logger _ = Logger.getLogger(E.class); public static final byte Z[] = { 0, 84, 67, 4 }; public static final String X = "NetStream"; int b; Publication c; _A W; boolean V; int Y; String a; public A(int i, byte abyte0[], Peer p, ISession d) { super(i, abyte0, "NetStream", p, d); Packet a1 = new AudioPacket(abyte0, abyte0.length); a1.D(4); b = a1.J(); Iterator iterator = I.getPublications().values().iterator(); do { if(!iterator.hasNext()) break; Publication b1 = (Publication)iterator.next(); if(b1.B() != b) continue; c = b1; break; } while(true); } public void C() { super.C(); H(); } void H() { if(W == _A.PUBLISHING) { I.getStreams().A(K, b, a); O.A("Unpublish.Success", (new StringBuilder()).append(a).append(" is now unpublished").toString()); } else if(W == _A.PLAYING) { I.getStreams().B(K, b, a); O.A("Play.Stop", (new StringBuilder()).append("Stopped playing ").append(a).toString()); } W = _A.IDLE; } protected void C(AudioPacket a1) { if(c != null && c.B() == b) { c.B(a1.C(), a1, Y); Y = 0; } else { _.warn("an audio packet has been received on a no publisher FlowStream, certainly a publication currently closing"); } } protected void A(AudioPacket a1) { if(c != null && c.B() == b) { c.A(a1.C(), a1, Y); Y = 0; } else { _.warn("a video packet has been received on a no publisher FlowStream, certainly a publication currently closing"); } } protected void A() { if(c != null && c.B() == b) c.D(); } protected void A(byte byte0, Packet a1) { short word0 = a1.E(); if(word0 == 34) { _.debug((new StringBuilder()).append("Bound ").append(A).append(" : ").append(a1.C()).append(" ").append(a1.C()).toString()); return; } else { _.error((new StringBuilder()).append("Unknown raw flag ").append(word0).append(" on FlowStream ").append(A).toString()); super.A(byte0, a1); return; } } protected void A(int i) { if(c != null) Y += i; super.A(i); } protected void A(String s, com.jcumulus.server.rtmfp.flow.B b1) { if("play".equals(s)) { H(); a = b1.E(); double d = -2000D; if(b1.B()) d = b1.N().doubleValue(); if(I.getStreams().A(K, b, a, O, d)) W = _A.PLAYING; } else if("closeStream".equals(s)) H(); else if("publish".equals(s)) { H(); a = b1.E(); _.info((new StringBuilder()).append("Create new publication with name - ").append(a).toString()); String s1; if(b1.B()) s1 = b1.E(); try { I.getStreams().A(K, b, a, O); W = _A.PUBLISHING; } catch(Exception exception) { _.error(exception.getMessage(), exception); } } else if(W == _A.PUBLISHING) { if(c == null) { c = (Publication)I.getPublications().get(a); if(c == null) _.error((new StringBuilder()).append("Publication ").append(a).append(" unfound, related for the ").append(s).append(" message").toString()); } if(c != null) c.A(s, b1.M()); } else { super.A(s, b1); } } }