2013년 11월 13일 수요일

Raspberry Pi - Still & Video Capture

[ Environment ]

- Raspberry Pi B Type
- RPI CAMERA BOARD


[ Method ]

- 기본 계정인 pi 로 로그인해서 사용해도 되지만, 난 root 로 로그인해서 테스트 함
- apt-get update
- apt-get upgrade
- raspi-config 실행 후 camera 를 활성화 한다

- reboot

- Still Capture : raspistill -v -o still01.jpg


- Video Capture : raspivid -t 30000 -o video01.h264 ( 대충 봐도 충분히 30 fps 나온다, CPU 점유율은 7.5% 정도, 훌륭하다 )

2013년 11월 12일 화요일

Raspberry Pi - Media Player

[ Environment ]

- Raspberry Pi B Type
- 배포본 : Raspbian GNU/Linux 7


[ Method ]

- XBMC 라는 Media Center 가 따로 있기는 하지만, 셋탑박스 만들때나 필요하겠다
- vsftp 설치 해서, 이웃집토토로를 SD Card 에 옮겨 두었다
- 기본적으로 위의 배포본 설치 시, omxplayer 가 설치 되어 있다
- sudo omxplayer 이웃집토토로.avi ( 이런식으로 걍 실행 한다, omxplayer 가 Overlay 로 뿌리고 있는거 같은데, CPU 점유율은 약 11~12% 정도, Mem 은 5~6% , 훌륭하다. 네이버 미디어 플레이어로 내 노트북에서 실행할 때, 약 7 ~ 10 % 인데... 완전 맘에 든다 )

2013년 11월 11일 월요일

Raspberry Pi 구동 준비 사항 ( Preparing )

[ Environment ]

- Windows7 64 bit
- Raspberry Pi B Type
- [Transcend] MicroSDHC, Class4 [8GB]
- SD Reader : PMS-R04
- [멜로디] 멜로디 HDMI to DVI 듀얼 골드코팅 케이블 1.5M
- microSD Adapter H (수평타입 SD어댑터)

http://www.raspberrypi.org/downloads 에서 Formatting Tool Link 를 따라 가서 다운로드 한다
http://www.raspberrypi.org/downloads 에서 NOOBS_v1_3_2.zip 을 다운로드


[ Method ]

- Windows 에 다운로드한 Tool 을 설치 한다
- 설치 후 실행한 다음, Option Button Click
- 2번째 Option 중 Format size adjustment 을 "ON" 으로 선택


- Format 이 완료 되면 아래 그림과 같은 확인 메세지 박스가 나타난다

- Format 이 완료 되면, 다운로드한 NOOBS_v1_3_2.zip 의 압축을 풀어 SD Card Drive 로 복사 한다
- 이제 SD Card 를 Raspberry Pi 에 넣고, Power 를 켜면, 최초 설치 가 시작 된다



Raspberry Pi Default username / passoword

[ Environment ]

- Linux raspberrypi 3.6.11+ #538 PREEMPT Fri Aug 30 20:42:08 BST 2013 armv6l


[ Method ]

- 최소 설치 시 암호를 변경하지 않았다면 아래와 같다
- username : pi
- password : raspberry

2013년 10월 21일 월요일

Oracle LPAD 활용

[ 환경 ]
- Oracle 11g function


[ 목적 ]
- Primary Key 형태 : ABC-20131012-001
- 위의 Key 에 대한 Sequence 한 Max 값을 구하는 Oracle Function 코드 작성, 특히 마지막 3자리에서 최대값에 1을 더한 값을 구해야 한다, Number Type 이면 쉽게 구할 수 있지만, Char 가 섞여 있어, 아래와 같이 조금 복잡해 졌다


[ Function 코드 ]
- Primary Key 에 대한 최대값 구하기
- Substr 으로 마지막 3자리 자르기
- Number Type 으로 변경
- LPAD 으로 1을 더하고. 3번째 자리 기준으로 왼쪽에 0을 채운다
- 마지막으로 원래 Format 으로 재배치 한다

CREATE OR REPLACE FUNCTION TBABLE_USER.F_MaxNo (mType VARCHAR2, mDate VARCHAR2) RETURN VARCHAR2 AS
mNextNo VARCHAR2(16);

BEGIN  
    SELECT mType || '-' || mDate || '-' || LPAD(NVL(SUBSTR(MAX(NO), -3), 0) + 1, 3, '0') INTO mNextNo FROM TB_TABLE
    WHERE NO LIKE mType || '%';

    RETURN mNextNo;
END;
/


[ 참고 ]
-- LPAD Sample
SELECT LPAD('Page 1',15,'*.') "LPAD example"
  FROM DUAL;

LPAD example
---------------
*.*.*.*.*Page 1

2013년 10월 4일 금요일

confirm javascript function call form aspx.cs

[ 환경 ]
asp.net
iis

[ 목적 ]
asp.net 의 aspx.cs 의 C# code 에서 javascript ( confirm 에 대한 ) 을 호출하여, 사용자가 선택 한 상황(yes or no)에 따라 Process 를 분기 한다

[ 방법 ]
아래 방법을 보면 알겠지만, 숨김 버튼 한개를 만들고, 이벤트를 걸어서 처리 한다
1. aspx.cs code
protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
      ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "test", "test();", true);
  }
}

protected void LinkButton3_Click(object sender, EventArgs e)
{
    myProcess();
}

2. aspx code
<asp:LinkButton ID="LinkButton3" runat="server" Text="clickMeToo" OnClick="LinkButton3_Click" style='display:none;'></asp:LinkButton>
<script type="text/javascript">  
    function BookingCancelConfirm() {
        var ans = confirm('are you ok?');
        if (ans) {
            <%= Page.GetPostBackEventReference(LinkButton3) %>
            return true;
        }
        else {
            self.location = '/default.aspx';
            return false;
        }
    }
</script>

2013년 9월 23일 월요일

Oracle 에서 Sequence 생성과 사용 ( Dual )

Unique Key 로 보통 Auto Increment 로 설정하여 사용하여도 되나, 아래와 같이 Sequence 를 생성하여 사용 할 수 있다

[생성]
CREATE SEQUENCE 시퀀스이름
  START WITH 1
  MAXVALUE 999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER; COMMIT;

[사용]
select 시퀀스이름.nextval from dual;

2013년 9월 22일 일요일

Byte Array to Float

[ 설명 ]
- 아래 함수면 왠만한 예외 상황은 해결
- ordering : 송신측의 상황에 따라 변경해서 사용
- IsNaN : Return Value 의 상태에 따라 적당히 사용하면 되겠다
- Math.Round : 아래 함수를 사용 할 때, Return Value 가 무한소수점이 반환 된다면, 다른 쪽에서 여러가지 문제가 발생 할 수 있다. Parameter 로 소수점 자리수를 조절해도 괜찮을 것이다. 일단 급해서 hard coding...

        public static float ByteToFloat(byte[] buf, int startIndex, int nLen, bool ordering)
        {
            try
            {
                float fRtn = 0.00f;

                byte[] tempBuf = new byte[nLen];
                Buffer.BlockCopy(buf, startIndex, tempBuf, 0, nLen);

                if (ordering == false)
                {
                    fRtn = System.BitConverter.ToSingle(tempBuf, 0);
                }
                else
                {
                    fRtn = System.BitConverter.ToSingle(tempBuf.Reverse().ToArray(), tempBuf.Length - sizeof(Single) - 0);
                }

                if (float.IsNaN(fRtn))
                    return (float)0;
                else
                {
                    return (float)Math.Round(fRtn, 2);
                }
            }
            catch
            {
                return (float)0;
            }
        }

2013년 9월 15일 일요일

ERWin7 에서 한글 Column Name Display

[환경]
 - ERWin7.2.5

1. Physical 선택 후, 여백화면에서 오른쪽 마우스 클릭 후 Harden Physical Names 선택
2. Logical 로 변경
3. 메뉴 [Model] - [Domain Dictionary] 후, Name Inherited by Attribute 항목을 "%ColumnsComment" 로 변경
4. 메뉴 [Model] - [Attributes] 선택 후, Reset 클릭, Reset all attributes in model 선택 후 Select Properties to Reset 항목은 Name 만 선택

2013년 9월 5일 목요일

c# 에서 Queue 사용

어떤 객체에 대해서, 한 곳에서 처리하기 위해 간단히 Queue 를 사용해 본다
Transaction 이 거시기 한 Cubrid( invalid buffer position 등과 같은 Exception Error ) 에, 짧은 순간 많은 쿼리를 처리 하거나 할 때...

선언
using System.Collections;
public Queue m_sqlQueue = new Queue();


구현
        public override bool SQLAdd(string sQuery)
        {
            try
            {
                m_sqlQueue.Enqueue(sQuery);
                return true;
            }
            catch (Exception ex)
            {
                MiddlewareLog.LogDebug(ex);
                return false;
            }

        }

// 아래 예제 스레드는 간단하지만, diffTick 을 20ms 으로 고정하지 않고, 짱구를 좀 굴리면 좀 더 최적화 해서 처리 할 수 있다, 여기선 Pass
        private void DoDBApply()
        {
            try
            {
                int startTick = Environment.TickCount;
                int currTick = 0;
                int diffTick = 0;
                do
                {
                    System.Threading.Thread.Sleep(1);

                    if (bShutdown == true) break;

                    currTick = Environment.TickCount;
                    diffTick = currTick - startTick;
                    if (diffTick > 20)
                    {
                        startTick = Environment.TickCount;
                        diffTick = 0;

                        if (m_sqlQueue.Count > 0)
                        {
                            object str = m_sqlQueue.Dequeue();
                            QueryExecute((string)str);
                        }
                    }
                } while (bShutdown == false);
            }
            catch
            {
            }
        }

2013년 9월 4일 수요일

Windows 부팅 시 로그인 안 물어보기

command prompt > control userpasswords2

2013년 9월 3일 화요일

Dictionary 를 Array List 처럼 사용하기

선언

public static Dictionary<string, object> jsonSPDM24n = new Dictionary<string, object>();


할당

두번째 인자인 object 에 다시 같은 형태의 Dictionary<string, object> 를 Add 메소드를 사용하여 추가하거나, Assign 해서 사용 할 수 있다

                if (jsonSPDM24n.ContainsKey(json["device_id"].ToString() + "_" + json["addressno"].ToString()) == true)
                {
                    jsonSPDM24n[json["device_id"].ToString() + "_" + json["addressno"].ToString()] = json;
                }
                else
                {
                    jsonSPDM24n.Add(json["device_id"].ToString() + "_" + json["addressno"].ToString(), json);
                }

즉, 아래와 같은 의미가 되겠다

Dictionary<string, Dictionary<string, object>>


사용

이제 이걸 꺼내서 사용하는 것은,

                foreach (KeyValuePair<string, object> temp in jsonSPDM24n)
                {
                    Dictionary<string, object> json = (Dictionary<string, object>)temp.Value;
                    if ((string)json["producttype"] == "spdm24n")
                    {
                        ....
                     }
                 }

2013년 8월 28일 수요일

Oracle 의 (+) 사용

- Outer join 에 사용 된다 ( 조건을 만족하지 않는 행도 반환 )

- Left Outer Join : 왼편 테이블에 행이 없어도 반환
SELECT T1.A, T2.B
FROM TABLE1 T1, TABLE2 T2
WHERE T1.C(+) = T2.C

- Right Outer Join : 오른편 테이블에 행이 없어도 반환
SELECT T1.A, T2.B
FROM TABLE1 T1, TABLE2 T2
WHERE T1.C = T2.C(+)

2013년 8월 27일 화요일

asp.net 개발 시 iis 설치 옵션

환경
- WIndows7 64bit
- Visual Studio 2012

설치
- 제어판 - 프로그램 및 기능 - Windows 기능 사용/사용 안함
- 기본 적으로 위의 환경 일 경우 IIS7.5 가 설치 되게 된다
- Visual Studio 2012 의 Express IIS 를 사용하더라도 기본적으로 설치 한다 ( 호환성과 권한 문제로 3xx, 4xx, 5xx 대 에러를 무수히 만날 것이다


2013년 8월 22일 목요일

Oracle 에서 Table 을 Save As 하기

CREATE TABLE 새테이블명 AS SELECT * FROM 기존테이블명

2013년 7월 29일 월요일

80 포트가 사용 중 입니다

Visual Studio 로 IIS Express 을 사용하는 ASP.NET 프로젝트 Build 시 위와 같이 메세지가 발생 한다면...

netstat -ano 로 80 port 를 사용하는 프로세스를 찾는다
사용하는 놈이 NT Kernel 이라면 아래 리스트들 중에 사용하는 놈이 있다

World Wide Web Publishing Service
SQL Server Integration Services 10.0
SQL Server Reporting Services(MSSQLSERVER)

.NET Framework 4 Client Profile에 포함되지 않은 기능


  • ASP.NET
  • 고급 WCF(Windows Communication Foundation) 기능
  • .NET Framework Data Provider for Oracle
  • 컴파일용 MSBuild

2013년 7월 14일 일요일

vsftpd 에서 특정 사용자의 기본 경로 변경

vi /etc/vsftpd/vsftpd.conf

chroot_local_user=YES

save & vsftpd restart


usermod 를 사용하여 moncat 이라는 사용자의 홈 디렉토리 경로를 tomcat web root 디렉토리로 변경 한다

usermod -d /usr/local/tomcat7/webapps/ROOT moncat

2013년 7월 3일 수요일

NVIDIA 7300GT Die

주말에 빌딩 정전 작업이 있다고 해서, 사용하던 Linux Server 를 꺼두고, 오늘에야 생각나서 전원을 켰다

원래 부팅 시, 팬 소음이 심해서 파워 On 후 한 10분 정도면 어느정도 소음이 조용해져서, 그냥저냥 쓰고 있었다

근데 오늘은 20분이 됐는데도 탱크소리가 멈추지 않는 것이다

얼마전, 딸내미에게 준 X60 Notebook Fan Cooler 도 DIY 한 통빡이 있어, 이건 분명 Fan문제...

온도를 체크 해봤다

Centos 에 sensors 가 없어, yum install lm_sensors 로 설치

>sensors

헉, 2번째(PCI) 온도가 107도

High 가 100도고 Crit 가 105도 였는데, 이미 넘었고, Max 120도까지 찍는게 보였다

아무생각 없이 가만히 쳐다보고 있다가 Shutdown 했다

본체 뚜껑을 열어보니, 먼지가 먼지가...

지포스 VGA 만 탈거해서, 거금 4500원을 주고 Dust brower 로 옥외 주차장가서 사정없이 불어 줬다

다시 장착하고, 부팅해보니, 이런 팬이 걍 멈춰 있네, 이미 아까 120도 찍고, 사망한신 듯...


그래도 다행인건, Main Board 에 OnBoard 로 VGA 가 하나 더 있다.. ㅋㅋ




2013년 6월 24일 월요일

kernel 상세 확인

lsb_release -a

Relative path for Uri ( C# )

this.dashboardViewer1.DashboardUri = new System.Uri(@"../bin/data/Xfra_Widget.xml", System.UriKind.Relative);

2013년 6월 11일 화요일

root access by ssh

vi /etc/ssh/sshd_config
PermitRootLogin yes
save
/etc/rc.d/init.d/sshd restart

2013년 5월 8일 수요일

CentOS 에서 설치 되어 있는 Java Provider 변경 하기

CentOS 를 기본적으로 설치하고, Java JDK or JRE 가 필요해서 설치하고, 난 후 아무리 path 를 잡아도 설치한 JDK or JRE 를 사용 할 수가 없다

아래와 같은 방법을 사용한다

환경
  • Centos - kernel 2.6.32-279.22.1.e16

준비물
  • jdk-7u17-linux-i586.rpm

방법

1설치 전, 현재 머신에 설치 된 Java 정보를 확인한다
[root@localhost bin]# alternatives --config java
There are 2 programs which provide 'java'.
  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
   2           /usr/lib/jvm/jre-1.5.0-gcj/bin/java

2. JDK 설치 ( 난 rpm 버전 다운로드 해서 설치 했다 )

3. path 를 설정 해야 한다, vi ~/.bash_profile 실행 후 맨 아래쯤에 아래와 같이 편집한다
export JAVA_HOME=/usr/java/jdk1.7.0_17/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/*

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

export PATH

4. 설정 내용을 적용하기 위해, source ~/.bash_profile 를 실행

5. alternatives --config java 실행 후, 새로 설치 한 JAVA 를 선택 한다
[root@localhost bin]# alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
   2           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
   3           /usr/java/jdk1.7.0_17/bin/java

Enter to keep the current selection[+], or type selection number: 3

6. java -version 를 실행 해 본다
[root@localhost bin]# java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing)

7. javac 를 실행해서 먹히는지 확인 한다



2013년 5월 7일 화요일

Visual Studio 2012 에서 Linux libcurl Build 하기

환경

  • OS - Window7
  • Tool - Visual Studio 2012 Professional


준비사항

  • ActivePerl(5.16.2.1603) - http://www.activestate.com/activeperl/downloads
  • OpenSSL(1.0.1e) - http://www.openssl.org/source1.0.1e
  • libSSH2(1.4.3) - http://www.libssh2.org
  • libcurl(7.28.1) - http://curl.haxx.se/download.html
  • Netwide Assembler(2.10.07) -  http://www.nasm.us


Install & Build

  • ActivePeal 을 설치
  • 나머지는 c:\cURL\* 에 압축 풀어서 각각 위치 시킨다
  • nasm 을 사용해서 openssl 을 compile 해야 해서 윈도우 환경변수에 nasm Path 를 추가 한다  path=%PATH%;c:\cURL\nasm-2.10.07
  • 저 밑에 nmake 시 cl 도 사용하기 때문에 VS Command 를 사용해야 한다
  • nasm 을 소스 버전으로 받았으니 make 해서 Binary 를 만든다. c:\cURL\nasm-2.10.07 에 가서 nmake /f Mkfiles/msvc.mak 를 실행 한다
  • openssl lib output 용 Directory 를 하나 더 만든다 mkdir c:\cURL\openssl_lib
  • 이제 openssl 소스 폴더로 이동 cd c:\cURL\openssl-1.0.1e\
  • perl Configure VC-WIN32 --prefix=c:\cURL\openssl_lib
  • ms\do_nasm ( 시간이 좀 걸리다 )
  • c:\cURL\openssl-1.0.1e\nmake -f ms\nt.mak ( 이건 시간이 더 걸리다. 한 2시간 걸리는 것 같다 )
  • c:\cURL\openssl-1.0.1e\out32 에서 확인
  • c:\cURL\openssl-1.0.1e\nmake -f ms\nt.mak test ( 이것도 오래 걸리는데, 중간에 중지 시켰다 )
  • c:\cURL\openssl-1.0.1e\nmake -f ms\nt.mak install


  • VS 2012 를 열고 c:\cURL\libssh2-1.4.3\win32\libssh2.dsp 을 Open 한다
  • VS IDE 에서 빌드->구성 관리자를 선택 후 활성 솔루션 구성을 LIB Debug 로 설정 한다
  • VS IDE 의 솔루션 탐색기에서 libssh2 를 선택 후 오른쪽 마우스 클릭하여 속성을 선택한다
  • 속성 페이지에서 구성 속성->C/C++->일반 메뉴 중 추가 포함 디렉터리에 다음을 추가 한다
  • 속성 페이지에서 구성 속성->C/C++->코드 생서 메뉴 중 런타임 라이브러리 항목을 "다중 스레드 디버그 DLL (/MDd) 로 변경 한다
  • 속성 페이지에서 구성 속성->라이브러리 관리자->일반 메뉴 중 출력 파일 속성을 Debug_lib\libssh2.lib 으로 변경 한다
  • 속성 페이지에서 구성 속성->라이브러리 관리자->일반 메뉴 중 추가 종속성 항목의 속성에 libeay32.lib;ssleay32.lib 를 추가 한다
  • 속성 페이지에서 구성 속성->라이브러리 관리자->일반 메뉴 중 추가 라이브러리 디렉터리에 c:\cURL\openssl_lib\lib
  • 이제 libssh2 를 Build 한다


  • curl-7.28.1 을 다운로드하고 c:\cURL\curl-7.28.1 에 압축을 푼다 ( 이 버전만 vsproj 가 있는 것 같다 )
  • c:\cURL\curl-7.28.1\libcurl.vcproj 를 VS2012 로 Open 한다
  • VS IDE 의 솔루션 탐색기에서 libcurl 를 선택 후 오른쪽 마우스 클릭하여 속성을 선택한다
  • 속성 페이지에서 구성 속성->C/C++->일반 메뉴 중 추가 포함 디렉터리에 다음을 추가 한다 ( c:\cURL\libssh2-1.4.3\include\ )
  • 속성 페이지에서 구성 속성->C/C++->일반 메뉴 중 전처리기 정의에 다음을 추가 한다 ( ;CURL_STATICLIB;USE_LIBSSH2;CURL_DISABLE_LDAP;HAVE_LIBSSH2;HAVE_LIBSSH2_H;LIBSSH2_WIN32 ;LIBSSH2_LIBRARY )
  • 속성 페이지에서 구성 속성->라이브러리 관리자->일반 메뉴 중 추가 종속성 항목의 속성에 libssh2.lib 를 추가 한다
  • 속성 페이지에서 구성 속성->라이브러리 관리자->일반 메뉴 중 추가 라이브러리 디렉터리에 c:\cURL\libssh2-1.4.3\win32\Debug_lib 를 추가 한다
  • 이제 libcurl 를 Build 한다


  • 이제 위에서 Build 된 libcurl lib 를 가지고 테스트 프로그램을 만든다
  • 프로젝트를 만들기 전에 미리 폴더 구성을 해둔다
  • c:\cURL\Project
  • c:\cURL\Project\custom_libraries
  • c:\cURL\Project\custom_libraries\include
  • c:\cURL\Project\custom_libraries\lib_dbg
  • 위에서 Build 된 c:\cURL\curl-7.28.1\include\ 의 모든 폴더/파일을 c:\cURL\Projects\custom_libraries\include\ 로 복사한다
  • 그리고 c:\cURL\curl-7.28.1\lib\Debug\ 의 모든 파일들을 c:\cURL\Projects\custom_libraries\lib_dbg\ 로 복사한

  • VS 2012 를 실행하고 새 프로젝트를 만든다 win32 Console Application 으로 만든다. Location 은 c:\cURL\Projects\ 을 선택하고, Create directory for solution 은 체크해 둔다. 프로젝트 이름은 test_curl 로 정했다
  • Application Settings 에서 Addtional options 들 중 기본 체크되어 있는 항목 들을 모두 언체크 한다
  • VS IDE 의 솔루션 탐색기에서 test_curl 를 선택 후 오른쪽 마우스 클릭하여 속성을 선택한다
  • 속성 페이지에서 구성 속성->C/C++->일반 메뉴 중 추가 포함 디렉터리에 다음을 추가 한다 ( c:\cURL\Project\custom_libraries\include )
  • 속성 페이지에서 구성 속성->C/C++->일반 메뉴 중 전처리기 정의에 다음을 추가 한다 ( ;CURL_STATICLIB )
  • 속성 페이지에서 구성 속성->링커->일반 메뉴 중 추가 라이브러리 디렉터리에 다음을 추가 한다 ( c:\cURL\Project\custom_libraries\lib_dbg )
  • 속성 페이지에서 구성 속성->링커->입력 메뉴 중 추가 종속성에 다음을 추가 한다 ( ;libcurl.lib;ws2_32.lib )






2013년 3월 6일 수요일

Asterisk 11 에서 TLS 와 SRTP 를 정상적으로 돌린 예

오류를 만났을 때를 대비해 올려 둔다


Client A ( 1000 ) <--> Asterisk ( TLS, SRTP ) <--> Client B ( 1001 )

Client A IP : 192.168.1.151
Client B IP : 192.168.1.131
Asterisk IP : 192.168.1.106

<--- SIP read from TLS:192.168.1.151:58418 --->
INVITE sip:1001@192.168.1.106:5061;transport=tls SIP/2.0
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK802a1e955685e211b295a5e36e5e2deb;rport;alias
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 5 INVITE
Contact: <sip:1000@192.168.1.151:5062;transport=tls>
Content-Type: application/sdp
Allow: INVITE, OPTIONS, ACK, BYE, CANCEL, INFO, NOTIFY, MESSAGE, UPDATE
Max-Forwards: 70
Supported: 100rel, replaces, from-change
User-Agent: SIPPER for PhonerLite
P-Preferred-Identity: <sip:1000@192.168.1.106>
Content-Length: 365

v=0
o=- 3664105484 1 IN IP4 192.168.1.151
s=SIPPER for PhonerLite
c=IN IP4 192.168.1.151
t=0 0
m=audio 5062 RTP/SAVP 8 0 101
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:ZHXu5KBoj8MK32CKMJgQv6IyCaDCJGsxjaP3heIV
a=encryption:optional
a=ssrc:2834382215
a=sendrecv
<------------->
--- (14 headers 14 lines) ---
Sending to 192.168.1.151:58418 (no NAT)
Using INVITE request as basis request - 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
Found peer '1000' for '1000' from 192.168.1.151:58418

<--- Reliably Transmitting (NAT) to 192.168.1.151:58418 --->
SIP/2.0 401 Unauthorized
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK802a1e955685e211b295a5e36e5e2deb;alias;received=192.168.1.151;rport=58418
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>;tag=as0c95498a
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 5 INVITE
Server: Asterisk PBX 11.2.1
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="54692493"
Content-Length: 0


<------------>
Scheduling destruction of SIP dialog '802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151' in 32000 ms (Method: INVITE)

<--- SIP read from TLS:192.168.1.151:58418 --->
ACK sip:1001@192.168.1.106:5061;transport=tls SIP/2.0
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK802a1e955685e211b295a5e36e5e2deb;rport;alias
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>;tag=as0c95498a
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 5 ACK
Content-Length: 0

<------------->
--- (7 headers 0 lines) ---

<--- SIP read from TLS:192.168.1.151:58418 --->
INVITE sip:1001@192.168.1.106:5061;transport=tls SIP/2.0
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK802a1e955685e211b296a5e36e5e2deb;rport;alias
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 6 INVITE
Contact: <sip:1000@192.168.1.151:5062;transport=tls>
Authorization: Digest username="1000", realm="asterisk", nonce="54692493", uri="sip:1001@192.168.1.106:5061;transport=tls", response="0af5468b1ce97a76e4ad687f79ddd48c", algorithm=MD5
Content-Type: application/sdp
Allow: INVITE, OPTIONS, ACK, BYE, CANCEL, INFO, NOTIFY, MESSAGE, UPDATE
Max-Forwards: 70
Supported: 100rel, replaces, from-change
User-Agent: SIPPER for PhonerLite
P-Preferred-Identity: <sip:1000@192.168.1.106>
Content-Length: 365

v=0
o=- 3664105484 1 IN IP4 192.168.1.151
s=SIPPER for PhonerLite
c=IN IP4 192.168.1.151
t=0 0
m=audio 5062 RTP/SAVP 8 0 101
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:ZHXu5KBoj8MK32CKMJgQv6IyCaDCJGsxjaP3heIV
a=encryption:optional
a=ssrc:2834382215
a=sendrecv
<------------->
--- (15 headers 14 lines) ---
Sending to 192.168.1.151:58418 (NAT)
Using INVITE request as basis request - 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
Found peer '1000' for '1000' from 192.168.1.151:58418
  == Using SIP RTP CoS mark 5
Found RTP audio format 8
Found RTP audio format 0
Found RTP audio format 101
Found audio description format PCMA for ID 8
Found audio description format PCMU for ID 0
Found audio description format telephone-event for ID 101
Capabilities: us - (ulaw|alaw), peer - audio=(ulaw|alaw)/video=(nothing)/text=(nothing), combined - (ulaw|alaw)
Non-codec capabilities (dtmf): us - 0x1 (telephone-event|), peer - 0x1 (telephone-event|), combined - 0x1 (telephone-event|)
Peer audio RTP is at port 192.168.1.151:5062
Looking for 1001 in default (domain 192.168.1.106)
list_route: hop: <sip:1000@192.168.1.151:5062;transport=tls>

<--- Transmitting (NAT) to 192.168.1.151:58418 --->
SIP/2.0 100 Trying
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK802a1e955685e211b296a5e36e5e2deb;alias;received=192.168.1.151;rport=58418
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 6 INVITE
Server: Asterisk PBX 11.2.1
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Contact: <sip:1001@192.168.1.106:5061;transport=TLS>
Content-Length: 0


<------------>
    -- Executing [1001@default:1] NoOp("SIP/1000-00000010", "STRP TEST CALL") in new stack
    -- Executing [1001@default:2] Set("SIP/1000-00000010", "_SIP_SRTP_SDES=1") in new stack
    -- Executing [1001@default:3] Set("SIP/1000-00000010", "_SIPSRTP=enable") in new stack
    -- Executing [1001@default:4] Dial("SIP/1000-00000010", "SIP/1001") in new stack
  == Using SIP RTP CoS mark 5
Audio is at 10452
Adding codec 100003 (ulaw) to SDP
Adding codec 100004 (alaw) to SDP
Adding non-codec 0x1 (telephone-event) to SDP
Reliably Transmitting (NAT) to 192.168.1.131:1162:
INVITE sip:1001@192.168.1.131:5064;transport=tls SIP/2.0
Via: SIP/2.0/TLS 192.168.1.106:5061;branch=z9hG4bK62a1d8b9;rport
Max-Forwards: 70
From: "1000" <sip:1000@192.168.1.106>;tag=as2d08fdeb
To: <sip:1001@192.168.1.131:5064;transport=tls>
Contact: <sip:1000@192.168.1.106:5061;transport=TLS>
Call-ID: 0890653214d997963645c7254cd05250@192.168.1.106:5061
CSeq: 102 INVITE
User-Agent: Asterisk PBX 11.2.1
Date: Thu, 07 Mar 2013 05:35:12 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 346

v=0
o=root 1013182859 1013182859 IN IP4 192.168.1.106
s=Asterisk PBX 11.2.1
c=IN IP4 192.168.1.106
t=0 0
m=audio 10452 RTP/SAVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:mMRKpI/m8Km1Of9+Yg+ZXvRhJDbHkpsWkG39TxPd

---
    -- Called SIP/1001

<--- SIP read from TLS:192.168.1.131:1162 --->
SIP/2.0 100 Trying
Via: SIP/2.0/TLS 192.168.1.106:5061;branch=z9hG4bK62a1d8b9;rport=5061
From: "1000" <sip:1000@192.168.1.106>;tag=as2d08fdeb
To: <sip:1001@192.168.1.131:5064;transport=tls>
Call-ID: 0890653214d997963645c7254cd05250@192.168.1.106:5061
CSeq: 102 INVITE
Allow: INVITE, OPTIONS, ACK, BYE, CANCEL, INFO, NOTIFY, MESSAGE, UPDATE
Server: SIPPER for PhonerLite
Content-Length: 0

<------------->
--- (9 headers 0 lines) ---

<--- SIP read from TLS:192.168.1.131:1162 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/TLS 192.168.1.106:5061;branch=z9hG4bK62a1d8b9;rport=5061
From: "1000" <sip:1000@192.168.1.106>;tag=as2d08fdeb
To: <sip:1001@192.168.1.131:5064;transport=tls>;tag=802a1e955685e211bb01f39673b1fead
Call-ID: 0890653214d997963645c7254cd05250@192.168.1.106:5061
CSeq: 102 INVITE
Contact: <sip:1001@192.168.1.131:5064;transport=tls>
Allow: INVITE, OPTIONS, ACK, BYE, CANCEL, INFO, NOTIFY, MESSAGE, UPDATE
Server: SIPPER for PhonerLite
Content-Length: 0

<------------->
--- (10 headers 0 lines) ---
list_route: hop: <sip:1001@192.168.1.131:5064;transport=tls>
    -- SIP/1001-00000011 is ringing

<--- Transmitting (NAT) to 192.168.1.151:58418 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK802a1e955685e211b296a5e36e5e2deb;alias;received=192.168.1.151;rport=58418
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>;tag=as4a1ba60a
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 6 INVITE
Server: Asterisk PBX 11.2.1
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Contact: <sip:1001@192.168.1.106:5061;transport=TLS>
Content-Length: 0


<------------>

<--- SIP read from TLS:192.168.1.131:1162 --->
SIP/2.0 200 OK
Via: SIP/2.0/TLS 192.168.1.106:5061;branch=z9hG4bK62a1d8b9;rport=5061
From: "1000" <sip:1000@192.168.1.106>;tag=as2d08fdeb
To: <sip:1001@192.168.1.131:5064;transport=tls>;tag=802a1e955685e211bb01f39673b1fead
Call-ID: 0890653214d997963645c7254cd05250@192.168.1.106:5061
CSeq: 102 INVITE
Contact: <sip:1001@192.168.1.131:5064;transport=tls>
Content-Type: application/sdp
Allow: INVITE, OPTIONS, ACK, BYE, CANCEL, INFO, NOTIFY, MESSAGE, UPDATE
Supported: replaces, from-change
Server: SIPPER for PhonerLite
Content-Length: 341

v=0
o=- 3541565629 1 IN IP4 192.168.1.131
s=SIPPER for PhonerLite
c=IN IP4 192.168.1.131
t=0 0
m=audio 5064 RTP/SAVP 8 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:X8/0CNQMoXIwAHnR83FGV90zS/v2e5CfvEBVIc+f
a=ssrc:519851118
a=sendrecv
<------------->
--- (12 headers 13 lines) ---
Found RTP audio format 8
Found RTP audio format 0
Found RTP audio format 101
Found audio description format PCMU for ID 0
Found audio description format PCMA for ID 8
Found audio description format telephone-event for ID 101
Capabilities: us - (ulaw|alaw), peer - audio=(ulaw|alaw)/video=(nothing)/text=(nothing), combined - (ulaw|alaw)
Non-codec capabilities (dtmf): us - 0x1 (telephone-event|), peer - 0x1 (telephone-event|), combined - 0x1 (telephone-event|)
Peer audio RTP is at port 192.168.1.131:5064
list_route: hop: <sip:1001@192.168.1.131:5064;transport=tls>
set_destination: Parsing <sip:1001@192.168.1.131:5064;transport=tls> for address/port to send to
set_destination: set destination to 192.168.1.131:5064
Transmitting (NAT) to 192.168.1.131:1162:
ACK sip:1001@192.168.1.131:5064;transport=tls SIP/2.0
Via: SIP/2.0/TLS 192.168.1.106:5061;branch=z9hG4bK15518c0a;rport
Max-Forwards: 70
From: "1000" <sip:1000@192.168.1.106>;tag=as2d08fdeb
To: <sip:1001@192.168.1.131:5064;transport=tls>;tag=802a1e955685e211bb01f39673b1fead
Contact: <sip:1000@192.168.1.106:5061;transport=TLS>
Call-ID: 0890653214d997963645c7254cd05250@192.168.1.106:5061
CSeq: 102 ACK
User-Agent: Asterisk PBX 11.2.1
Content-Length: 0


---
    -- SIP/1001-00000011 answered SIP/1000-00000010
Audio is at 18472
Adding codec 100003 (ulaw) to SDP
Adding codec 100004 (alaw) to SDP
Adding non-codec 0x1 (telephone-event) to SDP

<--- Reliably Transmitting (NAT) to 192.168.1.151:58418 --->
SIP/2.0 200 OK
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK802a1e955685e211b296a5e36e5e2deb;alias;received=192.168.1.151;rport=58418
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>;tag=as4a1ba60a
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 6 INVITE
Server: Asterisk PBX 11.2.1
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Contact: <sip:1001@192.168.1.106:5061;transport=TLS>
Content-Type: application/sdp
Content-Length: 344

v=0
o=root 167695273 167695273 IN IP4 192.168.1.106
s=Asterisk PBX 11.2.1
c=IN IP4 192.168.1.106
t=0 0
m=audio 18472 RTP/SAVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:aZZxOF0pTT+ZX6yqPO+2OFYQSn6NACHVUya5wQQt

<------------>

<--- SIP read from TLS:192.168.1.151:58418 --->
ACK sip:1001@192.168.1.106:5061;transport=TLS SIP/2.0
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK808480975685e211b296a5e36e5e2deb;rport;alias
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>;tag=as4a1ba60a
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 6 ACK
Contact: <sip:1000@192.168.1.151:5062;transport=tls>
Authorization: Digest username="1000", realm="asterisk", nonce="54692493", uri="sip:1001@192.168.1.106:5061;transport=TLS", response="0798b41a3be5d62178429ba127c43925", algorithm=MD5
Max-Forwards: 70
Content-Length: 0

<------------->
--- (10 headers 0 lines) ---

<--- SIP read from TLS:192.168.1.151:58418 --->
BYE sip:1001@192.168.1.106:5061;transport=TLS SIP/2.0
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK00fc0e9e5685e211b296a5e36e5e2deb;rport;alias
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>;tag=as4a1ba60a
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 7 BYE
Contact: <sip:1000@192.168.1.151:5062;transport=tls>
Authorization: Digest username="1000", realm="asterisk", nonce="54692493", uri="sip:1001@192.168.1.106:5061;transport=TLS", response="dd5cbc609545f27c554309306dc71135", algorithm=MD5
Max-Forwards: 70
User-Agent: SIPPER for PhonerLite
Content-Length: 0

<------------->
--- (11 headers 0 lines) ---
Sending to 192.168.1.151:58418 (NAT)
Scheduling destruction of SIP dialog '802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151' in 32000 ms (Method: BYE)

<--- Transmitting (NAT) to 192.168.1.151:58418 --->
SIP/2.0 200 OK
Via: SIP/2.0/TLS 192.168.1.151:58418;branch=z9hG4bK00fc0e9e5685e211b296a5e36e5e2deb;alias;received=192.168.1.151;rport=58418
From: "1000" <sip:1000@192.168.1.106>;tag=3690110982
To: <sip:1001@192.168.1.106:5061;transport=tls>;tag=as4a1ba60a
Call-ID: 802A1E95-5685-E211-B294-A5E36E5E2DEB@192.168.1.151
CSeq: 7 BYE
Server: Asterisk PBX 11.2.1
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Content-Length: 0


<------------>
    -- Executing [h@default:1] Hangup("SIP/1000-00000010", "") in new stack
  == Spawn extension (default, h, 1) exited non-zero on 'SIP/1000-00000010'
Scheduling destruction of SIP dialog '0890653214d997963645c7254cd05250@192.168.1.106:5061' in 32000 ms (Method: INVITE)
set_destination: Parsing <sip:1001@192.168.1.131:5064;transport=tls> for address/port to send to
set_destination: set destination to 192.168.1.131:5064
Reliably Transmitting (NAT) to 192.168.1.131:1162:
BYE sip:1001@192.168.1.131:5064;transport=tls SIP/2.0
Via: SIP/2.0/TLS 192.168.1.106:5061;branch=z9hG4bK5217b6fa;rport
Max-Forwards: 70
From: "1000" <sip:1000@192.168.1.106>;tag=as2d08fdeb
To: <sip:1001@192.168.1.131:5064;transport=tls>;tag=802a1e955685e211bb01f39673b1fead
Call-ID: 0890653214d997963645c7254cd05250@192.168.1.106:5061
CSeq: 103 BYE
User-Agent: Asterisk PBX 11.2.1
X-Asterisk-HangupCause: Normal Clearing
X-Asterisk-HangupCauseCode: 16
Content-Length: 0


---
  == Spawn extension (default, 1001, 4) exited non-zero on 'SIP/1000-00000010'

<--- SIP read from TLS:192.168.1.131:1162 --->
SIP/2.0 200 OK
Via: SIP/2.0/TLS 192.168.1.106:5061;branch=z9hG4bK5217b6fa;rport=5061
From: "1000" <sip:1000@192.168.1.106>;tag=as2d08fdeb
To: <sip:1001@192.168.1.131:5064;transport=tls>;tag=802a1e955685e211bb01f39673b1fead
Call-ID: 0890653214d997963645c7254cd05250@192.168.1.106:5061
CSeq: 103 BYE
Contact: <sip:1001@192.168.1.131:5064;transport=tls>
Server: SIPPER for PhonerLite
Content-Length: 0

RTP/SAVP


SRTP 를 적용할 때는 SAVP 를 사용해야 한다

Abbreviation for Real-time Transport Protocol / Secure Audio Video Profile

The RTP (Real-time Transport Protocol) specification establishes a registry of profile names for use by higher-level control protocols, such as the SDP (Session Description Protocol), to refer to transport methods. This profile registers the name Real-time Transport Protocol / Secure Audio Video Profile .

RFC 3711

2013년 2월 27일 수요일

CentOS X Window 시작 여부 설정

CentOS 6.3 에서

# vi /etc/inittab


id:3:initdefault: <-- 수정

  • Run level 3 : full multiuser environment with networking.
  • run level 3 + X window.