Transcript 임베디드특강_OSGi&UPnP
한국외국어대학교 컴퓨터 및 정보통신공학과 200930251 최화영([email protected])
DISLab.
2
Contents
OSGi OSGi란? OSGi 구성요소 OSGi Framework package • Framework – Bundle – Service & Bundle life cycle • Device Manager • HttpService & LogService OSGi Bundle & Service 생성 OSGi Framework의 구현 • Bundle의 설치, 삭제, 실행, 정지 Framework & Bundle Example: Equinox기반 OSGi Bundle UPnP Home Network Middleware UPnP란?
UPnP Entity Protocol Stack Architecture Protocol Stack • SSDP & GENA • SOAP XML UPnP Networking • Addressing • Discovery • Description • Control • Eventing UPnP Control Point • Setup & Initialization • Discover • Description • Event – Subscribe, notify • Invoking Action • Shutting down Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
3
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
4
OSGi OSGi(Open Service Gateway Initiative) Service Gateway • 음성과 데이터, 멀티미디어 통신을 통합 관리하여 가정과 사무실 등으로 전송 해주고 서비스해 주는 기능을 수행. OSGi의 장점 하드웨어 플랫폼과 OS에 독립적 공통의 응용 API를 구현하므로 응용 분야에 독립적 하나의 플랫폼에 여러 종류의 서비스 제공자가 서비스를 제공 • 받을 수 있는 서비스가 다양 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
5
OSGi 구성요소
주요 구성 요소 Bundle : 서비스를 제공하기 위한 기능적 배포 단위 Framework : 번들의 라이프 사이클을 관리하는 번들 실행 환경 Service : 특정 기능을 수행하는 자바 인터페이스와 실제 구현 객체 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
6
OSGi Framework Package
패키지명
org.osgi.framework
org.osgi.service.device
org.osgi.service.http
org.osgi.service.log
설 명
OSGi 자바 서비스 프레임워크 OSGi 디바이스 액세스 서비스 명세 OSGi HttpService 명세 OSGi LogService 명세 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
7
Framework
OSGi Framework 연속적으로 동작할 수 있는 애플리케이션을 작성할 수 있는 context 제공이 목적.
자바 프로그래밍 언어가 가진 코드의 네트워크 이동성을 이용 • 컴포넌트 기반의 개발 환경 제공 • 보다 풍부하고 구조적인 서비스 개발 가능 OSGi Framework이 제공하고자 하는 환경의 목표 애플리케이션이 실행 중에도 동적으로 다운로드 및 업그레이드가 가능 제한된 메모리 디바이스 사용 가능 효율적이고 통합된 컴포넌트 개발환경 제공 애플리케이션 간의 의존성에 대한 관리 기능 제공 확장 가능성(scalable) Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
8
Bundle
Bundle이란 ?
Unit of modularization – OSGi 스펙 정의 Bundle = JAR + OSGi정보(META-INF/MANIFEST.MF) Bundle의 상태 INSTALLED . 번들이 성공적으로 인스톨 된 상태 RESOLVED . 번들이 현재 START 되거나 STOP가 될 준비가 되어 있는 상태 STARTING . 번들이 START가 되고 있는 상태, 아직 return이 안된 상태.
STOPPING . 번들이 STOP하고 있는 상태, 아직 return이 안 된 상태 ACTIVE . 번들이 현재 동작하고 있는 상태 UNINSTALLED . 번들이 uninstall된 상태.
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Service & Bundle life cycle
9
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Device Manager
Device Manager 디바이스 탐지(Device Detection) • 모든 새로운 디바이스 인터페이스 객체를 검색 위치 단계(Location Phase) • 새로 추가된 모든 드라이버를 DriverLocator를 이용해 위치시킴 경선 단계(Bidding phase) • 각 드라이버를 디바이스 상에서 경선에 참여 추가 단계(Attach Phase) • 경선 단계에서의 최상위 드라이버 추가 청소 단계(Cleanup Phase) • idle 드라이버를 청소 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
10
Http & Log Service
HttpService Framework 내의 다른 번들이 리소스를 등록할 수 있게 함.
HTTP를 통해서 Servlet에 접근할 수 있게 함. 등록 가능 Entity • Servlet : Java Servlet API를 구현한 객체 • Resource : HTML 파일, GIF 파일, Class 파일 포함 LogService 이벤트와 에러 상황에 대한 리포트가 목적. 번들로부터의 로그 요청을 받아들임 LogReaderService : 다른 번들의 로그 항목을 읽어 들이는 역할 4개의 인터페이스로 구성 • LogEntry, LogListener, LogReaderService, LogService Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
11
OSGi Bundle & Service 생성
12
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
OSGi Framework의 구현(1)
번들의 설치와 삭제 설치과정 BundleContext.installBundle() 메쏘드를 호출 .
1.
2.
3.
4.
5.
6.
7.
번들이 이미 인스톨되어 있는 지를 확인 번들의 코드 베이스로부터 내용을 얻어 옴.
새로운 번들을 생성하고 관련된 리소스들을 할당 번들의 상태를 INSTALLED 상태로 변경 번들의 클래스 패스 및 네이티브 코드 의존성을 해결 INSTALLED 타입의 BundleEvent를 브로드캐스트 위의 과정에서 예외가 발생하지 않았으면 종료하고, 예외가 발생하면 원래의 상태 로 되돌리고 종료 삭제과정 1.
2.
3.
Bundle.uninstall() 메쏘드에서 구현됨.
번들의 상태가 ACTIVE이면, 이 번들을 정지.
UNINSTALLED 타입의 BundleEvent를 브로드캐스팅 번들의 상태를 UNINSTALLED 상태로 변경. 4.
번들이 점유하고 있는 영속 저장공간을 반환 . Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
13
OSGi Framework의 구현(2)
번들의 실행 Framework가 Bundle.start() 메소드를 호출.
1.
2.
3.
4.
5.
6.
현재의 번들의 상태를 체크한다.
현재 번들의 상태에 따라 다음과 같이 처리 • UNINSTALLED – IllegalStateException 발생 • STARTING 혹은 STOPPING - 일정한 시간동안 대기(wait) • ACTIVE – 막바로 종료함 • INSTALLED – 의존성을 해결(resolve)함. (성공 후 RESOLVED 상태로 전환됨) • RESOLVED – 다음 단계로 진행 번들의 상태를 STARTING 상태로 변환함 BundleActivator.start() 메쏘드 호출 영속 저장공간에 번들의 상태를 시작된 상태로 기록 STARTED 타입의 번들 이벤트를 브로드캐스트. Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
14
OSGi Framework의 구현(3)
번들의 정지 Bundle.stop() 메소드를 호출 1.
2.
3.
4.
5.
6.
7.
8.
현재의 번들의 상태를 체크 현재 번들의 상태에 따라 다음과 같이 처리 • UNINSTALLED – IllegalStateException 발생 • STARTING 혹은 STOPPING - 일정한 시간동안 대기(wait) • INSTALLED 혹은 RESOLVED – 막바로 리턴 • ACTIVE – 다음 단계로 진행 번들의 상태를 STOPPING 상태로 변환함 영속 저장공간에 번들의 상태를 정지된 상태로 기록 BundleActivator.stop() 메쏘드 호출 이벤트 리스너와 이 번들에 의해 등록된 서비스의 등록을 모두 취소 번들의 상태를 RESOLVED로 변환함 STOPPED 타입의 BundleEvent를 브로드 캐스트 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
15
Framework & Bundle
프레임워크와 서비스 번들의 상호 작용 Bundle Service Implementation (UPnPImpl) Service Interface (UPnPService) Service Registry Hash Table Name Service implementation Name Service implementation Bundle Context Framework Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
16
Example: Equinox기반 OSGi Bundle(1)
17
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Example: Equinox기반 OSGi Bundle(2)
18
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Example: Equinox기반 OSGi Bundle(3)
19
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Example: Equinox기반 OSGi Bundle(4)
20
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Example: Equinox기반 OSGi Bundle
21
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
22
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Home Network Middleware
서로 다른 기종간의 서버와 클라이언트를 연결해주는 소프트웨어 애플리케이션이 어떤 시스템 환경에서도 동작할 수 있도록 지원해 주는 역할 모든 홈 네트워크를 구성하는데 있어 중심이 되는 소프트웨어 가정에 여러 개의 기기가 같거나 다른 홈 네트워킹 미디어에 의해 연결되어 있을 때, 각각의 기기 간의 인터페이스 사이에 완충 역할을 해 줄 중간층이 없이는 이들 기기 간의 제어나 데이터의 전송은 불가능함 기기간 완충 역할 미들웨어 기술을 이용하면 분산형 연산 환경과 서비스를 지원 가능 데이터 네트워크와 제어 네트워크를 쉽게 통합 가능 다양한 홈 네트워킹 기술을 이용한 기기 간의 데이터를 통합하기가 쉬움 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
23
UPnP(Universal Plug and Play)
UPnP pc와 정보가전들 간에 peer-to-peer 연결을 위한 미들웨어 이미 검증된 네트워크 프로토콜 및 웹 기술을 기반으로 홈 네트워킹 기기 간의 제어 모델 구현 Feature 개방형 분산 networking architecture TCP/IP 기반의 Web 기술 활용가능 network에 연결된 기기들 사이에 control 정보와 data 정보를 전달 Device Driver 불필요 OS나 application을 구현한 language에 독립적 UPnP에서 application을 위한 API를 규격화하지 않음. Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
24
UPnP Entity
Controllers(or control points) UPnP Device의 표준서비스를 UPnP 방식으로 제어할 수 있는 장치 Controlled Devices UPnP Forum에서 정의한 Device의 표준 서비스를 지원하는 Device
25
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
UPnP Protocol Stack Architecture
IP기반의 Protocol 기술로써 IP가 지원되는 네트워크이면 전송 매체와 상관없 이 지원 가능.
UPnP Vendor Defined UPnP Forum Working Committee Defined UPnP Device Architecture Defined SSDP HTTPMU (Discovery) GENA SSDP HTTPU (Discovery) SOAP (Control) HTTP (Description) UDP TCP HTTP GENA (Events) IP Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
26
UPnP Protocol Stack
TPC/IP HTTPU(HTTP over UDP)/HTTPMU(HTTP Multicast over UDP) SSDP(Simple Service Discovery Protocol) GENA(General Event Notification Architecture) SOAP(Simple Object Access Protocol) Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
27
SSDP & GENA
SSDP(Simple Service Discovery Protocol ) 네트워크 서비스들을 발견하는 방식을 정의 Device들은 SSDP를 이용하여 자신을 광고할 수 있음. GENA(General Event Notification Architecture) TCP/IP를 통한 HTTP 및 멀티캐스트 UDP를 사용하여 notification을 송수신하는 기 능을 제공하기 위해 정의 Event 실행을 위하여 가입자 및 통보 발행자의 개념을 정의 UPnP는 GENA 포맷을 사용하여 존재 발표 내용을 생성한 후 • SSDP 프로토콜을 통하여 전송하고 UPnP 이벤트 작업의 서비스 상태 변화를 신호로 알려 주는 기능을 함. Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
28
SOAP
SOAP(Simple Object Access Protocol) 원격 프로시저 호출을 수행하기 위한 XML문서와 HTTP의 사용 방법을 정의 기존의 인터넷 인프라를 통하여 방화벽 및 프록시에 아주 효율적인 기능 수행 보안용 SSL(Secure Sockets Layer)를 활용 HTTP의 연결 관리 기능을 활용 • 인터넷 분산형 통신을 웹 페이지에 접속하는 것 만큼 쉽게 만듦.
UPnP는 SOAP를 사용하여 제어 메시지를 장치들로 전송 • 그 결과 및 오류 내역을 제어 포인트로 반환하는 역할 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
29
XML
XML(Extensible Markup Language) 웹 상의 구조화된 데이터를 위한 범용 포맷 태그와 특성(Tags, Attributes)사용 HTML과 비슷하나 사용자가 태그와 특성을 정의할 수 있음.
• 다양한 문서 형태에 적합한 스키마를 정의하는데 아주 적합 UPnP에서 장치 및 서비스 설명서, 제어 메시지 및 이벤트에 사용
30
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
31
UPnP Networking
수동기기
(Controlled Device)
Presentation Server (HTML UI)
5 Presentation
5 Control point controls device and/or views device status using HTML UI Event Server
4 Eventing: GENA
4 Control point listens to state changes of device 능동기기
(Control Point)
Web Browser Event Client Control Server ( 실제 구동 제어 )
3 Control: SOAP
3 Control point invokes actions on device Control Client Description Server (Device, Service by XML) Discovery Server ( 기본 제원 설명 )
2 Description
2 Control point learns about device capabilities
1 Discovery: GENA, SSDP
1 Control point finds interesting device Description Client Discovery Client
0 Addressing: (1) DHCP / AutoIP+ARP (2) DNS
0 Control point and device get addresses Gateway Gateway (internet sharing, Firewell, VPN … ) 외부망 모뎀 접속 Multi ISP Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Addressing(step0)
Addressing(step 0)
DHCP(Dynamic Host Configuration Protocol) Auto-IP
Addressing 절차
UPnP 접속 규격을 따르는 기기가 Network에 접속 DHCP를 지원하는 host가 주위에 있는가 확인.
주위에 없을 경우 • Auto-IP방식에 의해서 IP를 할당 • ARP(Address Resolution Protocol)를 이용해서 IP를 검증 Auto-IP방식에 의해 IP 설정했을 경우라도 • 일정한 주기로 DHCP 지원 host 존재 여부 확인 • 발견될 경우, DHCP에 의해 IP 할당 IP를 재설정
32
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Discovery(step1)
33
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Description(step2)
34
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Control(step3)
35
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Eventing(step4)
36
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Presentation(step5)
37
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
38
UPnP Control Point
1.Setup &Initialization 2.Discover
3.Description
4.Event – Subscribe, Notify 5.Control – Action 6.Shutting Down
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Setup and Initialization
TvCtrlPointStart( ) UPnP의 Control Point를 실행시킬 경우 처음으로 호출되는 함수.
Control Point를 작동시키는데 필요한 여러 가지 초기화 작업 수행. • Control command Thread 초기화 & 시작 • Time Thread 초기화 & 시작 • IP, Port 얻기 • UPnP 작동에 필요한 초기화 TvCtrlPointStart() UpnpInit() UpnpGetServerIpAddress() UpnpGetServerPort() short int port = 0; char *ip_address = NULL; rc = UpnpInit ( ip_address, port ); if (UPNP_E_SUCCESS != rc) { rc = SampleUtil_Print( "UpnpInit() Error: %d", rc ); UpnpFinish(); return TV_ERROR; } ---------------------------------------------------------------------------- UpnpRegisterClient ( TvCtrlPointCallbackEventHandler, &ctrlpt_handle, &ctrlpt_handle ); UpnpRegisterClient() Control Point 가 NW 에 참가했을음 NW 를 통해 알림 .
TvCtrlPointRefresh() Control Point 가 관리하는 List 를 깨끗이 지우고 재 생성 . Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
39
Discover
TvCtrlPointCallbackEventHandler() UPnP NW상에서 장치들의 정보를 얻어오는 과정, } { int
TvCtrlPointCallbackEventHandler
( Upnp_EventType EventType, void *Event, void *Cookie ) switch ( EventType ) { case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: case UPNP_DISCOVERY_SEARCH_RESULT: { struct Upnp_Discovery *d_event = ( struct Upnp_Discovery * ) Event; IXML_Document *DescDoc=NULL; int ret; if ((ret =
UpnpDownloadXmlDoc
( d_event->Location,&DescDoc )) != UPNP_E_SUCCESS){ else { break;
TvCtrlPointAddDevice
TvCtrlPointPrintList(); ( DescDoc, d_event->Location, d_event->Expires ); } if (DescDoc) ixmlDocument_free( DescDoc ); { } case UPNP_DISCOVERY_SEARCH_TIMEOUT: /* Nothing to do here... */ break; case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: struct Upnp_Discovery *d_event = (struct Upnp_Discovery * ) Event;
TvCtrlPointRemoveDevice
(d_event->DeviceId); TvCtrlPointPrintList(); break; } }
40
/* … */ } Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Description
UpnpDownloadXmlDoc() UPnP에 추가된 Device의 세세한 사항을 알아오는 단계 Control Point는 Discover에서 받은 url을 통해 Device내에 xml 문서를 가 져옴.
UpnpDownloadXmlDoc() UpnpdownloadUrlItem() Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
41
Event - Subscribe
UpnpSubscribe()/UpnpSubscribeAsync() Device에 대한 상태 변화를 예의 주시할 경우 • Control Point는 해당 Device의 특정 Service에 Subscription을 요청 Subscription이 맺어지면 • Device의 Status variable의 변화가 감지되는 경우 이를 Control point에 알려주게 됨. TvCtrlPointAddDevice() UpnpSubscribe() 일반적으로 advertisement Point Device 가 하는 것을 가 받게 되면 , 대해서 자동적으로 해당 Control service 에 Subscribe 를 요청하도록 되어 있음 . } ret =
UpnpSubscribe
( ctrlpt_handle, eventURL[service], &TimeOut[service], eventSID[service] ); if(ret == UPNP_E_SUCCESS) { SampleUtil_Print( "Subscribed to EventURL with SID=%s", eventSID[service] ); } else { SampleUtil_Print( "Error Subscribing to EventURL -- %d", ret ); strcpy( eventSID[service], "" ); Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
42
Event - notify
TvCtrlPointCallbackEventHandler() Control point가 Device의 subscribe를 요청한 상태에서, Device의 status variable의 변화가 생기면 이를 control point에 알려주기 위해서 사용. } { int
TvCtrlPointCallbackEventHandler
( Upnp_EventType EventType, void *Event, void *Cookie ) { /* … */ switch ( EventType ) { /* … */ case UPNP_EVENT_RECEIVED: Event 를 받게 되면 자동적으로 TvCtrlPointHandleEvent() 가 call 되어 지고 , 이 함수의 내부로 들어가 어떤 Service 인지 구분 struct Upnp_Event *e_event = (struct Upnp_Event * ) Event; TvCtrlPointHandleEvent ( e_event->Sid, e_event->EventKey, e_event->ChangedVariables ); break; } /* … */ return 0; Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
43
Invoking Action
TvCtrlPointSendAction() Control point에 등록된 Device에 어떤 명령을 내릴 때 이용하는 함수. IXML_Document *actionNode = NULL; if (0 == param_count) { actionNode =
UpnpMakeAction
(actionname, TvServiceType[service], 0, NULL); } else { for (param = 0; param < param_count; param++) { if (
UpnpAddToAction
( &actionNode, actionname,TvServiceType[service], param_name[param], param_val[param]) != UPNP_E_SUCCESS) { /* Handle error… */ } } } rc =
UpnpSendActionAsync
( ctrlpt_handle, devnode->device.TvService[service].ControlURL, TvServiceType[service], NULL, actionNode, TvCtrlPointCallbackEventHandler, NULL ); } if (rc != UPNP_E_SUCCESS) { SampleUtil_Print( "Error in UpnpSendActionAsync -- %d", rc ); rc = TV_ERROR; UpnpMakeAction() XML 문서 형식으로 wrapping 하는 함수 UpnpAddToAction() Request 문서에 argument 를 추가해서 보낼 때 쓰이는 함수 UpnpSendActionAsync() Action 을 실제로 보낼 때 쓰이는 함수
44
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
Shutting Down
TvCtrlPointStop() 등록된 Device 제거 Mutex, Thread pool 제거 web service, time thread 종료 TvCtrlPointStop() TvCtrlPointRemoveAll() } { int
TvCtrlPointStop
( void ) TvCtrlPointRemoveAll(); UpnpUnRegisterClient( ctrlpt_handle ); UpnpFinish(); SampleUtil_Finish(); return TV_SUCCESS; Control Point 가 가지고 있던 Device List 를 제거하는 함수 UpnpUnRegiterClient() UPnP NW 상의 control Point 이 탈퇴함을 알리는 함수 UpnpFinish() 세부적인 종료 처리를 진행하는 함수 Database & Information Systems Lab.(http://dislab.hufs.ac.kr)
45
46
Q & A
Database & Information Systems Lab.(http://dislab.hufs.ac.kr)