이 내용은 http://blog.naver.com/jongwon0320/100190851814 이 원본입니다.
* 1. 라이브러리 추가
아래 소스를 라이브러리 파일로 Export 하신 후에 [wowza-dir]/lib 폴더로 옮겨 놓으시고
* 2. Application.xml config 수정
모듈을 적용할 Application.xml 파일을 열고
publisherIPBlockingModule
publisherIPBlockingModule
com.gscdn.mycompany.wowza.PublisherIPBlockingModule
모듈 부분에 추가해줍니다.
* 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 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 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 getAllowIPList(){
List ipList = new ArrayList();
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;
}
}