사용자 도구

사이트 도구


wowza004

이 내용은 http://blog.naver.com/jongwon0320/100190851814 이 원본입니다.

  • 1. 라이브러리 추가

아래 소스를 라이브러리 파일로 Export 하신 후에 [wowza-dir]/lib 폴더로 옮겨 놓으시고

  • 2. Application.xml config 수정

모듈을 적용할 Application.xml 파일을 열고

                        <Module>
                                <Name>publisherIPBlockingModule</Name>
                                <Description>publisherIPBlockingModule</Description>
                                <Class>com.gscdn.mycompany.wowza.PublisherIPBlockingModule</Class>
                        </Module>

모듈 부분에 추가해줍니다.

  • 3. iplist 파일 생성

모듈을 적용한 어플리케이션의 [wowza-dir]/conf/[application_name]/ 폴더에 publishiplist 파일을 생성 후 아이피를 적어줍니다. 아이피 구분은 행으로 하며 아이피 앞에 ”#” 표시가 있다면 주석처리로 간주합니다.(그 아이피는 제외한단 말이죠 ^^)

package com.mycompany.plugin.wowza;
 
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
import com.wowza.wms.amf.AMFDataList;
import com.wowza.wms.application.IApplicationInstance;
import com.wowza.wms.client.IClient;
import com.wowza.wms.module.ModuleBase;
import com.wowza.wms.request.RequestFunction;
 
public class PublisherIPBlockingModule extends ModuleBase {
 
 private String _configFileDir = "/usr/local/WowzaMediaServer/conf/";
 private String _configFileName = "publishiplist";
 
 public void onAppStart(IApplicationInstance appInstance){
  _configFileDir += appInstance.getApplication().getName() + "/";
 }
 
 public void publish(IClient client, RequestFunction function, AMFDataList params) {
  getLogger().info("Overriding Publish");
  
  boolean reject = true;
  List<String> ipList = getAllowIPList();
   
  try{ 
   String clientIP = client.getIp();
   for(int i = 0; i < ipList.size(); i++){
    if (clientIP.equalsIgnoreCase(ipList.get(i).trim())){
     reject = false; 
    }
   } 
  }catch(Exception ex){
   reject = true;
  }
  
  if(reject){ 
   sendClientOnStatusError(client, "NetStream.Publish.Denied", "The publisher's IP was rejected");
   getLogger().info("Client Rejected. IP: " + client.getIp());
  }else{ 
   invokePrevious(client, function, params);
  }  
 }
 
 public void releaseStream(IClient client, RequestFunction function, AMFDataList params)
 {
  getLogger().info("Overriding streamRelease");
  
  boolean reject = true;
  List<String> ipList = getAllowIPList();
   
  try{ 
   String clientIP = client.getIp();
   for(int i = 0; i < ipList.size(); i++){ 
    if(clientIP.equalsIgnoreCase(ipList.get(i).trim())){
     reject = false; 
    }
   }
  }catch(Exception ex){
   reject = true;
  }
  
  if(reject){
   sendClientOnStatusError(client, "NetStream.Publish.Denied", "The publisher's IP was rejected");
   getLogger().info("Client Rejected. IP: " + client.getIp());
  }else{   
   invokePrevious(client, function, params); 
  }  
 }
 
 public List<String> getAllowIPList(){
  List<String> ipList = new ArrayList<String>();
  File confFile = new File(_configFileDir, _configFileName);
  String ip = null;
  
  try{
   if(confFile.exists()){
    if(confFile.isFile() && confFile.canRead()){
     Scanner sc = new Scanner(confFile);
 
     while(sc.hasNext()){
      ip = sc.next().trim();
      if(ip.startsWith("#"))
       continue;
      ipList.add(ip);
     }
     
     sc.close();
    }else{
     getLogger().info("config file does not File");
    }
   }else{
    getLogger().info("config file does not exist");
   }
  }catch(Exception e){
   getLogger().warn("Exception occured : " + e.toString());
   return null;
  }
  
  return ipList;
 }
}
wowza004.txt · 마지막으로 수정됨: 2014/01/10 13:36 저자 minetech