author | korovkin <korovkin> | 2006-05-02 19:48:56 (UTC) |
---|---|---|
committer | korovkin <korovkin> | 2006-05-02 19:48:56 (UTC) |
commit | 1240155cf5865df0d0ce0e4bd04dfec68ec1ede5 (patch) (unidiff) | |
tree | 5b02700cd155920820712a9033cafe5ea60d6a30 | |
parent | c1299012f67f2ae99a4f83445692afbe9244a676 (diff) | |
download | opie-1240155cf5865df0d0ce0e4bd04dfec68ec1ede5.zip opie-1240155cf5865df0d0ce0e4bd04dfec68ec1ede5.tar.gz opie-1240155cf5865df0d0ce0e4bd04dfec68ec1ede5.tar.bz2 |
Destroy process on an object destruction.
-rw-r--r-- | noncore/net/opietooth/lib/manager.cc | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/noncore/net/opietooth/lib/manager.cc b/noncore/net/opietooth/lib/manager.cc index 83accf7..7311484 100644 --- a/noncore/net/opietooth/lib/manager.cc +++ b/noncore/net/opietooth/lib/manager.cc | |||
@@ -38,105 +38,107 @@ void Manager::setDevice( const QString& dev ){ | |||
38 | m_device = dev; | 38 | m_device = dev; |
39 | } | 39 | } |
40 | void Manager::setDevice( Device* /*dev*/ ){ | 40 | void Manager::setDevice( Device* /*dev*/ ){ |
41 | 41 | ||
42 | } | 42 | } |
43 | void Manager::isAvailable( const QString& device ){ | 43 | void Manager::isAvailable( const QString& device ){ |
44 | OProcess* l2ping = new OProcess(); | 44 | OProcess* l2ping = new OProcess(); |
45 | l2ping->setName( device.latin1() ); | 45 | l2ping->setName( device.latin1() ); |
46 | *l2ping << "l2ping" << "-c1" << device; | 46 | *l2ping << "l2ping" << "-c1" << device; |
47 | connect(l2ping, SIGNAL(processExited(Opie::Core::OProcess* ) ), | 47 | connect(l2ping, SIGNAL(processExited(Opie::Core::OProcess* ) ), |
48 | this, SLOT(slotProcessExited(Opie::Core::OProcess*) ) ); | 48 | this, SLOT(slotProcessExited(Opie::Core::OProcess*) ) ); |
49 | if (!l2ping->start() ) { | 49 | if (!l2ping->start() ) { |
50 | emit available( device, false ); | 50 | emit available( device, false ); |
51 | delete l2ping; | 51 | delete l2ping; |
52 | } | 52 | } |
53 | 53 | ||
54 | } | 54 | } |
55 | 55 | ||
56 | void Manager::isAvailable( Device* /*dev*/ ){ | 56 | void Manager::isAvailable( Device* /*dev*/ ){ |
57 | 57 | ||
58 | 58 | ||
59 | } | 59 | } |
60 | void Manager::searchDevices( const QString& device ){ | 60 | void Manager::searchDevices( const QString& device ){ |
61 | odebug << "Manager: search devices" << oendl; | 61 | odebug << "Manager: search devices" << oendl; |
62 | OProcess* hcitool = new OProcess(); | 62 | m_hcitool = new OProcess(); |
63 | hcitool->setName( device.isEmpty() ? "hci0" : device.latin1() ); | 63 | m_hcitool->setName( device.isEmpty() ? "hci0" : device.latin1() ); |
64 | *hcitool << "hcitool" << "scan"; | 64 | *m_hcitool << "hcitool" << "scan"; |
65 | connect( hcitool, SIGNAL(processExited(Opie::Core::OProcess*) ) , | 65 | connect( m_hcitool, SIGNAL(processExited(Opie::Core::OProcess*) ) , |
66 | this, SLOT(slotHCIExited(Opie::Core::OProcess* ) ) ); | 66 | this, SLOT(slotHCIExited(Opie::Core::OProcess* ) ) ); |
67 | connect( hcitool, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), | 67 | connect( m_hcitool, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), |
68 | this, SLOT(slotHCIOut(Opie::Core::OProcess*, char*, int ) ) ); | 68 | this, SLOT(slotHCIOut(Opie::Core::OProcess*, char*, int ) ) ); |
69 | if (!hcitool->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { | 69 | if (!m_hcitool->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { |
70 | odebug << "Manager: could not start" << oendl; | 70 | odebug << "Manager: could not start" << oendl; |
71 | RemoteDevice::ValueList list; | 71 | RemoteDevice::ValueList list; |
72 | emit foundDevices( device, list ); | 72 | emit foundDevices( device, list ); |
73 | delete hcitool; | 73 | delete m_hcitool; |
74 | m_hcitool = 0; | ||
74 | } | 75 | } |
75 | } | 76 | } |
76 | 77 | ||
77 | void Manager::searchDevices(Device* /*d*/ ){ | 78 | void Manager::searchDevices(Device* /*d*/ ){ |
78 | 79 | ||
79 | 80 | ||
80 | } | 81 | } |
81 | void Manager::addService(const QString& name ){ | 82 | void Manager::addService(const QString& name ){ |
82 | OProcess proc; | 83 | OProcess proc; |
83 | proc << "sdptool" << "add" << name; | 84 | proc << "sdptool" << "add" << name; |
84 | bool bo = true; | 85 | bool bo = true; |
85 | if (!proc.start(OProcess::DontCare ) ) | 86 | if (!proc.start(OProcess::DontCare ) ) |
86 | bo = false; | 87 | bo = false; |
87 | emit addedService( name, bo ); | 88 | emit addedService( name, bo ); |
88 | } | 89 | } |
89 | void Manager::addServices(const QStringList& list){ | 90 | void Manager::addServices(const QStringList& list){ |
90 | QStringList::ConstIterator it; | 91 | QStringList::ConstIterator it; |
91 | for (it = list.begin(); it != list.end(); ++it ) | 92 | for (it = list.begin(); it != list.end(); ++it ) |
92 | addService( (*it) ); | 93 | addService( (*it) ); |
93 | } | 94 | } |
94 | void Manager::removeService( const QString& name ){ | 95 | void Manager::removeService( const QString& name ){ |
95 | OProcess prc; | 96 | OProcess prc; |
96 | prc << "sdptool" << "del" << name; | 97 | prc << "sdptool" << "del" << name; |
97 | bool bo = true; | 98 | bool bo = true; |
98 | if (!prc.start(OProcess::DontCare ) ) | 99 | if (!prc.start(OProcess::DontCare ) ) |
99 | bo = false; | 100 | bo = false; |
100 | emit removedService( name, bo ); | 101 | emit removedService( name, bo ); |
101 | } | 102 | } |
102 | void Manager::removeServices( const QStringList& list){ | 103 | void Manager::removeServices( const QStringList& list){ |
103 | QStringList::ConstIterator it; | 104 | QStringList::ConstIterator it; |
104 | for (it = list.begin(); it != list.end(); ++it ) | 105 | for (it = list.begin(); it != list.end(); ++it ) |
105 | removeService( (*it) ); | 106 | removeService( (*it) ); |
106 | } | 107 | } |
107 | void Manager::searchServices( const QString& remDevice ){ | 108 | void Manager::searchServices( const QString& remDevice ){ |
108 | OProcess *m_sdp =new OProcess(); | 109 | m_sdp =new OProcess(); |
109 | *m_sdp << "sdptool" << "browse" << remDevice; | 110 | *m_sdp << "sdptool" << "browse" << remDevice; |
110 | m_sdp->setName( remDevice.latin1() ); | 111 | m_sdp->setName( remDevice.latin1() ); |
111 | odebug << "Manager: search Services for " << remDevice.latin1() << oendl; | 112 | odebug << "Manager: search Services for " << remDevice.latin1() << oendl; |
112 | connect(m_sdp, SIGNAL(processExited(Opie::Core::OProcess*) ), | 113 | connect(m_sdp, SIGNAL(processExited(Opie::Core::OProcess*) ), |
113 | this, SLOT(slotSDPExited(Opie::Core::OProcess* ) ) ); | 114 | this, SLOT(slotSDPExited(Opie::Core::OProcess* ) ) ); |
114 | connect(m_sdp, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), | 115 | connect(m_sdp, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), |
115 | this, SLOT(slotSDPOut(Opie::Core::OProcess*, char*, int) ) ); | 116 | this, SLOT(slotSDPOut(Opie::Core::OProcess*, char*, int) ) ); |
116 | if (!m_sdp->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { | 117 | if (!m_sdp->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { |
117 | odebug << "Manager: could not start sdptool" << oendl; | 118 | odebug << "Manager: could not start sdptool" << oendl; |
118 | delete m_sdp; | 119 | delete m_sdp; |
120 | m_sdp = 0; | ||
119 | Services::ValueList list; | 121 | Services::ValueList list; |
120 | emit foundServices( remDevice, list ); | 122 | emit foundServices( remDevice, list ); |
121 | } | 123 | } |
122 | } | 124 | } |
123 | void Manager::searchServices( const RemoteDevice& dev){ | 125 | void Manager::searchServices( const RemoteDevice& dev){ |
124 | searchServices( dev.mac() ); | 126 | searchServices( dev.mac() ); |
125 | } | 127 | } |
126 | QString Manager::toDevice( const QString& /*mac*/ ){ | 128 | QString Manager::toDevice( const QString& /*mac*/ ){ |
127 | return QString::null; | 129 | return QString::null; |
128 | } | 130 | } |
129 | QString Manager::toMac( const QString &/*device*/ ){ | 131 | QString Manager::toMac( const QString &/*device*/ ){ |
130 | return QString::null; | 132 | return QString::null; |
131 | } | 133 | } |
132 | void Manager::slotProcessExited(OProcess* proc ) { | 134 | void Manager::slotProcessExited(OProcess* proc ) { |
133 | bool conn= false; | 135 | bool conn= false; |
134 | if (proc->normalExit() && proc->exitStatus() == 0 ) | 136 | if (proc->normalExit() && proc->exitStatus() == 0 ) |
135 | conn = true; | 137 | conn = true; |
136 | 138 | ||
137 | QString name = QString::fromLatin1(proc->name() ); | 139 | QString name = QString::fromLatin1(proc->name() ); |
138 | emit available( name, conn ); | 140 | emit available( name, conn ); |
139 | delete proc; | 141 | delete proc; |
140 | } | 142 | } |
141 | void Manager::slotSDPOut(OProcess* proc, char* ch, int len) | 143 | void Manager::slotSDPOut(OProcess* proc, char* ch, int len) |
142 | { | 144 | { |
@@ -144,71 +146,75 @@ void Manager::slotSDPOut(OProcess* proc, char* ch, int len) | |||
144 | odebug << "Manager: SDP:" << str.data() << oendl; | 146 | odebug << "Manager: SDP:" << str.data() << oendl; |
145 | QMap<QString, QString>::Iterator it; | 147 | QMap<QString, QString>::Iterator it; |
146 | it = m_out.find(proc->name() ); | 148 | it = m_out.find(proc->name() ); |
147 | QString string; | 149 | QString string; |
148 | if ( it != m_out.end() ) { | 150 | if ( it != m_out.end() ) { |
149 | string = it.data(); | 151 | string = it.data(); |
150 | } | 152 | } |
151 | string.append( str ); | 153 | string.append( str ); |
152 | m_out.replace( proc->name(), string ); | 154 | m_out.replace( proc->name(), string ); |
153 | 155 | ||
154 | } | 156 | } |
155 | void Manager::slotSDPExited( OProcess* proc) | 157 | void Manager::slotSDPExited( OProcess* proc) |
156 | { | 158 | { |
157 | odebug << "Manager: proc name " << proc->name() << oendl; | 159 | odebug << "Manager: proc name " << proc->name() << oendl; |
158 | Services::ValueList list; | 160 | Services::ValueList list; |
159 | if (proc->normalExit() ) { | 161 | if (proc->normalExit() ) { |
160 | QMap<QString, QString>::Iterator it = m_out.find( proc->name() ); | 162 | QMap<QString, QString>::Iterator it = m_out.find( proc->name() ); |
161 | if ( it != m_out.end() ) { | 163 | if ( it != m_out.end() ) { |
162 | odebug << "Manager: found process" << oendl; | 164 | odebug << "Manager: found process" << oendl; |
163 | list = parseSDPOutput( it.data() ); | 165 | list = parseSDPOutput( it.data() ); |
164 | m_out.remove( it ); | 166 | m_out.remove( it ); |
165 | } | 167 | } |
166 | } | 168 | } |
167 | emit foundServices( proc->name(), list ); | 169 | emit foundServices( proc->name(), list ); |
170 | if (proc == m_sdp) | ||
171 | m_sdp = 0; | ||
168 | delete proc; | 172 | delete proc; |
169 | } | 173 | } |
170 | Services::ValueList Manager::parseSDPOutput( const QString& out ) { | 174 | Services::ValueList Manager::parseSDPOutput( const QString& out ) { |
171 | Services::ValueList list; | 175 | Services::ValueList list; |
172 | odebug << "Manager: parsing output" << oendl; | 176 | odebug << "Manager: parsing output" << oendl; |
173 | Parser parser( out ); | 177 | Parser parser( out ); |
174 | list = parser.services(); | 178 | list = parser.services(); |
175 | return list; | 179 | return list; |
176 | } | 180 | } |
177 | 181 | ||
178 | void Manager::slotHCIExited(OProcess* proc ) { | 182 | void Manager::slotHCIExited(OProcess* proc ) { |
179 | odebug << "Manager: process exited" << oendl; | 183 | odebug << "Manager: process exited" << oendl; |
180 | RemoteDevice::ValueList list; | 184 | RemoteDevice::ValueList list; |
181 | if (proc->normalExit() ) { | 185 | if (proc->normalExit() ) { |
182 | odebug << "Manager: normalExit " << proc->name() << oendl; | 186 | odebug << "Manager: normalExit " << proc->name() << oendl; |
183 | QMap<QString, QString>::Iterator it = m_devices.find(proc->name() ); | 187 | QMap<QString, QString>::Iterator it = m_devices.find(proc->name() ); |
184 | if (it != m_devices.end() ) { | 188 | if (it != m_devices.end() ) { |
185 | odebug << "Manager: != end ;)" << oendl; | 189 | odebug << "Manager: != end ;)" << oendl; |
186 | list = parseHCIOutput( it.data() ); | 190 | list = parseHCIOutput( it.data() ); |
187 | m_devices.remove( it ); | 191 | m_devices.remove( it ); |
188 | } | 192 | } |
189 | } | 193 | } |
190 | emit foundDevices( proc->name(), list ); | 194 | emit foundDevices( proc->name(), list ); |
195 | if (proc == m_hcitool) | ||
196 | m_hcitool = 0; | ||
191 | delete proc; | 197 | delete proc; |
192 | } | 198 | } |
193 | void Manager::slotHCIOut(OProcess* proc, char* ch, int len) { | 199 | void Manager::slotHCIOut(OProcess* proc, char* ch, int len) { |
194 | QCString str( ch, len+1 ); | 200 | QCString str( ch, len+1 ); |
195 | odebug << "Manager: hci: " << str.data() << oendl; | 201 | odebug << "Manager: hci: " << str.data() << oendl; |
196 | QMap<QString, QString>::Iterator it; | 202 | QMap<QString, QString>::Iterator it; |
197 | it = m_devices.find( proc->name() ); | 203 | it = m_devices.find( proc->name() ); |
198 | odebug << "Manager: proc->name " << proc->name() << oendl; | 204 | odebug << "Manager: proc->name " << proc->name() << oendl; |
199 | QString string; | 205 | QString string; |
200 | if (it != m_devices.end() ) { | 206 | if (it != m_devices.end() ) { |
201 | odebug << "Manager: slotHCIOut " << oendl; | 207 | odebug << "Manager: slotHCIOut " << oendl; |
202 | string = it.data(); | 208 | string = it.data(); |
203 | } | 209 | } |
204 | string.append( str ); | 210 | string.append( str ); |
205 | 211 | ||
206 | m_devices.replace( proc->name(), string ); | 212 | m_devices.replace( proc->name(), string ); |
207 | } | 213 | } |
208 | RemoteDevice::ValueList Manager::parseHCIOutput(const QString& output ) { | 214 | RemoteDevice::ValueList Manager::parseHCIOutput(const QString& output ) { |
209 | odebug << "Manager: parseHCI " << output.latin1() << oendl; | 215 | odebug << "Manager: parseHCI " << output.latin1() << oendl; |
210 | RemoteDevice::ValueList list; | 216 | RemoteDevice::ValueList list; |
211 | QStringList strList = QStringList::split('\n', output ); | 217 | QStringList strList = QStringList::split('\n', output ); |
212 | QStringList::Iterator it; | 218 | QStringList::Iterator it; |
213 | QString str; | 219 | QString str; |
214 | for ( it = strList.begin(); it != strList.end(); ++it ) { | 220 | for ( it = strList.begin(); it != strList.end(); ++it ) { |