aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs')
-rw-r--r--OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs1691
1 files changed, 1691 insertions, 0 deletions
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
new file mode 100644
index 0000000..6fe86b2
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -0,0 +1,1691 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.IO;
31using System.Net;
32using System.Net.Sockets;
33using System.Reflection;
34using System.Text;
35using System.Threading;
36using log4net;
37using OpenMetaverse;
38using OpenMetaverse.Packets;
39using OpenSim.Framework;
40using OpenSim.Framework.Client;
41using OpenSim.Framework.Monitoring;
42using OpenSim.Region.Framework.Scenes;
43
44namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
45{
46 public delegate void OnIRCClientReadyDelegate(IRCClientView cv);
47
48 public class IRCClientView : IClientAPI, IClientCore
49 {
50 public event OnIRCClientReadyDelegate OnIRCReady;
51
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53
54 private readonly TcpClient m_client;
55 private readonly Scene m_scene;
56
57 private UUID m_agentID = UUID.Random();
58
59 public ISceneAgent SceneAgent { get; set; }
60
61 private string m_username;
62 private string m_nick;
63
64 private bool m_hasNick = false;
65 private bool m_hasUser = false;
66
67 private bool m_connected = true;
68
69 public IRCClientView(TcpClient client, Scene scene)
70 {
71 m_client = client;
72 m_scene = scene;
73
74 WorkManager.StartThread(InternalLoop, "IRCClientView", ThreadPriority.Normal, false, true);
75 }
76
77 private void SendServerCommand(string command)
78 {
79 SendCommand(":opensimircd " + command);
80 }
81
82 private void SendCommand(string command)
83 {
84 m_log.Info("[IRCd] Sending >>> " + command);
85
86 byte[] buf = Util.UTF8.GetBytes(command + "\r\n");
87
88 m_client.GetStream().BeginWrite(buf, 0, buf.Length, SendComplete, null);
89 }
90
91 private void SendComplete(IAsyncResult result)
92 {
93 m_log.Info("[IRCd] Send Complete.");
94 }
95
96 private string IrcRegionName
97 {
98 // I know &Channel is more technically correct, but people are used to seeing #Channel
99 // Dont shoot me!
100 get { return "#" + m_scene.RegionInfo.RegionName.Replace(" ", "-"); }
101 }
102
103 private void InternalLoop()
104 {
105 try
106 {
107 string strbuf = String.Empty;
108
109 while (m_connected && m_client.Connected)
110 {
111 byte[] buf = new byte[8]; // RFC1459 defines max message size as 512.
112
113 int count = m_client.GetStream().Read(buf, 0, buf.Length);
114 string line = Util.UTF8.GetString(buf, 0, count);
115
116 strbuf += line;
117
118 string message = ExtractMessage(strbuf);
119 if (message != null)
120 {
121 // Remove from buffer
122 strbuf = strbuf.Remove(0, message.Length);
123
124 m_log.Info("[IRCd] Recieving <<< " + message);
125 message = message.Trim();
126
127 // Extract command sequence
128 string command = ExtractCommand(message);
129 ProcessInMessage(message, command);
130 }
131 else
132 {
133 //m_log.Info("[IRCd] Recieved data, but not enough to make a message. BufLen is " + strbuf.Length +
134 // "[" + strbuf + "]");
135 if (strbuf.Length == 0)
136 {
137 m_connected = false;
138 m_log.Info("[IRCd] Buffer zero, closing...");
139 if (OnDisconnectUser != null)
140 OnDisconnectUser();
141 }
142 }
143
144 Thread.Sleep(0);
145 Watchdog.UpdateThread();
146 }
147 }
148 catch (IOException)
149 {
150 if (OnDisconnectUser != null)
151 OnDisconnectUser();
152
153 m_log.Warn("[IRCd] Disconnected client.");
154 }
155 catch (SocketException)
156 {
157 if (OnDisconnectUser != null)
158 OnDisconnectUser();
159
160 m_log.Warn("[IRCd] Disconnected client.");
161 }
162
163 Watchdog.RemoveThread();
164 }
165
166 private void ProcessInMessage(string message, string command)
167 {
168 m_log.Info("[IRCd] Processing [MSG:" + message + "] [COM:" + command + "]");
169 if (command != null)
170 {
171 switch (command)
172 {
173 case "ADMIN":
174 case "AWAY":
175 case "CONNECT":
176 case "DIE":
177 case "ERROR":
178 case "INFO":
179 case "INVITE":
180 case "ISON":
181 case "KICK":
182 case "KILL":
183 case "LINKS":
184 case "LUSERS":
185 case "OPER":
186 case "PART":
187 case "REHASH":
188 case "SERVICE":
189 case "SERVLIST":
190 case "SERVER":
191 case "SQUERY":
192 case "SQUIT":
193 case "STATS":
194 case "SUMMON":
195 case "TIME":
196 case "TRACE":
197 case "VERSION":
198 case "WALLOPS":
199 case "WHOIS":
200 case "WHOWAS":
201 SendServerCommand("421 " + command + " :Command unimplemented");
202 break;
203
204 // Connection Commands
205 case "PASS":
206 break; // Ignore for now. I want to implement authentication later however.
207
208 case "JOIN":
209 IRC_SendReplyJoin();
210 break;
211
212 case "MODE":
213 IRC_SendReplyModeChannel();
214 break;
215
216 case "USER":
217 IRC_ProcessUser(message);
218 IRC_Ready();
219 break;
220
221 case "USERHOST":
222 string[] userhostArgs = ExtractParameters(message);
223 if (userhostArgs[0] == ":" + m_nick)
224 {
225 SendServerCommand("302 :" + m_nick + "=+" + m_nick + "@" +
226 ((IPEndPoint) m_client.Client.RemoteEndPoint).Address);
227 }
228 break;
229 case "NICK":
230 IRC_ProcessNick(message);
231 IRC_Ready();
232
233 break;
234 case "TOPIC":
235 IRC_SendReplyTopic();
236 break;
237 case "USERS":
238 IRC_SendReplyUsers();
239 break;
240
241 case "LIST":
242 break; // TODO
243
244 case "MOTD":
245 IRC_SendMOTD();
246 break;
247
248 case "NOTICE": // TODO
249 break;
250
251 case "WHO": // TODO
252 IRC_SendNamesReply();
253 IRC_SendWhoReply();
254 break;
255
256 case "PING":
257 IRC_ProcessPing(message);
258 break;
259
260 // Special case, ignore this completely.
261 case "PONG":
262 break;
263
264 case "QUIT":
265 if (OnDisconnectUser != null)
266 OnDisconnectUser();
267 break;
268
269 case "NAMES":
270 IRC_SendNamesReply();
271 break;
272 case "PRIVMSG":
273 IRC_ProcessPrivmsg(message);
274 break;
275
276 default:
277 SendServerCommand("421 " + command + " :Unknown command");
278 break;
279 }
280 }
281 }
282
283 private void IRC_Ready()
284 {
285 if (m_hasUser && m_hasNick)
286 {
287 SendServerCommand("001 " + m_nick + " :Welcome to OpenSimulator IRCd");
288 SendServerCommand("002 " + m_nick + " :Running OpenSimVersion");
289 SendServerCommand("003 " + m_nick + " :This server was created over 9000 years ago");
290 SendServerCommand("004 " + m_nick + " :opensimirc r1 aoOirw abeiIklmnoOpqrstv");
291 SendServerCommand("251 " + m_nick + " :There are 0 users and 0 services on 1 servers");
292 SendServerCommand("252 " + m_nick + " 0 :operators online");
293 SendServerCommand("253 " + m_nick + " 0 :unknown connections");
294 SendServerCommand("254 " + m_nick + " 1 :channels formed");
295 SendServerCommand("255 " + m_nick + " :I have 1 users, 0 services and 1 servers");
296 SendCommand(":" + m_nick + " MODE " + m_nick + " :+i");
297 SendCommand(":" + m_nick + " JOIN :" + IrcRegionName);
298
299 // Rename to 'Real Name'
300 SendCommand(":" + m_nick + " NICK :" + m_username.Replace(" ", ""));
301 m_nick = m_username.Replace(" ", "");
302
303 IRC_SendReplyJoin();
304 IRC_SendChannelPrivmsg("System", "Welcome to OpenSimulator.");
305 IRC_SendChannelPrivmsg("System", "You are in a maze of twisty little passages, all alike.");
306 IRC_SendChannelPrivmsg("System", "It is pitch black. You are likely to be eaten by a grue.");
307
308 if (OnIRCReady != null)
309 OnIRCReady(this);
310 }
311 }
312
313 private void IRC_SendReplyJoin()
314 {
315 IRC_SendReplyTopic();
316 IRC_SendNamesReply();
317 }
318
319 private void IRC_SendReplyModeChannel()
320 {
321 SendServerCommand("324 " + m_nick + " " + IrcRegionName + " +n");
322 //SendCommand(":" + IrcRegionName + " MODE +n");
323 }
324
325 private void IRC_ProcessUser(string message)
326 {
327 string[] userArgs = ExtractParameters(message);
328 // TODO: unused: string username = userArgs[0];
329 // TODO: unused: string hostname = userArgs[1];
330 // TODO: unused: string servername = userArgs[2];
331 string realname = userArgs[3].Replace(":", "");
332
333 m_username = realname;
334 m_hasUser = true;
335 }
336
337 private void IRC_ProcessNick(string message)
338 {
339 string[] nickArgs = ExtractParameters(message);
340 string nickname = nickArgs[0].Replace(":","");
341 m_nick = nickname;
342 m_hasNick = true;
343 }
344
345 private void IRC_ProcessPing(string message)
346 {
347 string[] pingArgs = ExtractParameters(message);
348 string pingHost = pingArgs[0];
349 SendCommand("PONG " + pingHost);
350 }
351
352 private void IRC_ProcessPrivmsg(string message)
353 {
354 string[] privmsgArgs = ExtractParameters(message);
355 if (privmsgArgs[0] == IrcRegionName)
356 {
357 if (OnChatFromClient != null)
358 {
359 OSChatMessage msg = new OSChatMessage();
360 msg.Sender = this;
361 msg.Channel = 0;
362 msg.From = this.Name;
363 msg.Message = privmsgArgs[1].Replace(":", "");
364 msg.Position = Vector3.Zero;
365 msg.Scene = m_scene;
366 msg.SenderObject = null;
367 msg.SenderUUID = this.AgentId;
368 msg.Type = ChatTypeEnum.Say;
369
370 OnChatFromClient(this, msg);
371 }
372 }
373 else
374 {
375 // Handle as an IM, later.
376 }
377 }
378
379 private void IRC_SendNamesReply()
380 {
381 EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>();
382 foreach (EntityBase user in users)
383 {
384 SendServerCommand("353 " + m_nick + " = " + IrcRegionName + " :" + user.Name.Replace(" ", ""));
385 }
386 SendServerCommand("366 " + IrcRegionName + " :End of /NAMES list");
387 }
388
389 private void IRC_SendWhoReply()
390 {
391 EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>();
392 foreach (EntityBase user in users)
393 {
394 /*SendServerCommand(String.Format("352 {0} {1} {2} {3} {4} {5} :0 {6}", IrcRegionName,
395 user.Name.Replace(" ", ""), "nohost.com", "opensimircd",
396 user.Name.Replace(" ", ""), 'H', user.Name));*/
397
398 SendServerCommand("352 " + m_nick + " " + IrcRegionName + " n=" + user.Name.Replace(" ", "") + " fakehost.com " + user.Name.Replace(" ", "") + " H " + ":0 " + user.Name);
399
400 //SendServerCommand("352 " + IrcRegionName + " " + user.Name.Replace(" ", "") + " nohost.com irc.opensimulator " + user.Name.Replace(" ", "") + " H " + ":0 " + user.Name);
401 }
402 SendServerCommand("315 " + m_nick + " " + IrcRegionName + " :End of /WHO list");
403 }
404
405 private void IRC_SendMOTD()
406 {
407 SendServerCommand("375 :- OpenSimulator Message of the day -");
408 SendServerCommand("372 :- Hiya!");
409 SendServerCommand("376 :End of /MOTD command");
410 }
411
412 private void IRC_SendReplyTopic()
413 {
414 SendServerCommand("332 " + IrcRegionName + " :OpenSimulator IRC Server");
415 }
416
417 private void IRC_SendReplyUsers()
418 {
419 EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>();
420
421 SendServerCommand("392 :UserID Terminal Host");
422
423 if (users.Length == 0)
424 {
425 SendServerCommand("395 :Nobody logged in");
426 return;
427 }
428
429 foreach (EntityBase user in users)
430 {
431 char[] nom = new char[8];
432 char[] term = "terminal_".ToCharArray();
433 char[] host = "hostname".ToCharArray();
434
435 string userName = user.Name.Replace(" ","");
436 for (int i = 0; i < nom.Length; i++)
437 {
438 if (userName.Length < i)
439 nom[i] = userName[i];
440 else
441 nom[i] = ' ';
442 }
443
444 SendServerCommand("393 :" + nom + " " + term + " " + host + "");
445 }
446
447 SendServerCommand("394 :End of users");
448 }
449
450 private static string ExtractMessage(string buffer)
451 {
452 int pos = buffer.IndexOf("\r\n");
453
454 if (pos == -1)
455 return null;
456
457 string command = buffer.Substring(0, pos + 2);
458
459 return command;
460 }
461
462 private static string ExtractCommand(string msg)
463 {
464 string[] msgs = msg.Split(' ');
465
466 if (msgs.Length < 2)
467 {
468 m_log.Warn("[IRCd] Dropped msg: " + msg);
469 return null;
470 }
471
472 if (msgs[0].StartsWith(":"))
473 return msgs[1];
474
475 return msgs[0];
476 }
477
478 private static string[] ExtractParameters(string msg)
479 {
480 string[] msgs = msg.Split(' ');
481 List<string> parms = new List<string>(msgs.Length);
482
483 bool foundCommand = false;
484 string command = ExtractCommand(msg);
485
486
487 for (int i=0;i<msgs.Length;i++)
488 {
489 if (msgs[i] == command)
490 {
491 foundCommand = true;
492 continue;
493 }
494
495 if (foundCommand != true)
496 continue;
497
498 if (i != 0 && msgs[i].StartsWith(":"))
499 {
500 List<string> tmp = new List<string>();
501 for (int j=i;j<msgs.Length;j++)
502 {
503 tmp.Add(msgs[j]);
504 }
505 parms.Add(string.Join(" ", tmp.ToArray()));
506 break;
507 }
508
509 parms.Add(msgs[i]);
510 }
511
512 return parms.ToArray();
513 }
514
515 #region Implementation of IClientAPI
516
517 public Vector3 StartPos
518 {
519 get { return new Vector3(m_scene.RegionInfo.RegionSizeX * 0.5f, m_scene.RegionInfo.RegionSizeY * 0.5f, 50f); }
520 set { }
521 }
522
523 public bool TryGet<T>(out T iface)
524 {
525 iface = default(T);
526 return false;
527 }
528
529 public T Get<T>()
530 {
531 return default(T);
532 }
533
534 public UUID AgentId
535 {
536 get { return m_agentID; }
537 }
538
539 public void Disconnect(string reason)
540 {
541 IRC_SendChannelPrivmsg("System", "You have been eaten by a grue. (" + reason + ")");
542
543 m_connected = false;
544 m_client.Close();
545 }
546
547 public void Disconnect()
548 {
549 IRC_SendChannelPrivmsg("System", "You have been eaten by a grue.");
550
551 m_connected = false;
552 m_client.Close();
553 SceneAgent = null;
554 }
555
556 public UUID SessionId
557 {
558 get { return m_agentID; }
559 }
560
561 public UUID SecureSessionId
562 {
563 get { return m_agentID; }
564 }
565
566 public UUID ActiveGroupId
567 {
568 get { return UUID.Zero; }
569 }
570
571 public string ActiveGroupName
572 {
573 get { return "IRCd User"; }
574 }
575
576 public ulong ActiveGroupPowers
577 {
578 get { return 0; }
579 }
580
581 public ulong GetGroupPowers(UUID groupID)
582 {
583 return 0;
584 }
585
586 public bool IsGroupMember(UUID GroupID)
587 {
588 return false;
589 }
590
591 public string FirstName
592 {
593 get
594 {
595 string[] names = m_username.Split(' ');
596 return names[0];
597 }
598 }
599
600 public string LastName
601 {
602 get
603 {
604 string[] names = m_username.Split(' ');
605 if (names.Length > 1)
606 return names[1];
607 return names[0];
608 }
609 }
610
611 public IScene Scene
612 {
613 get { return m_scene; }
614 }
615
616 public int NextAnimationSequenceNumber
617 {
618 get { return 0; }
619 }
620
621 public string Name
622 {
623 get { return m_username; }
624 }
625
626 public bool IsActive
627 {
628 get { return true; }
629 set { if (!value) Disconnect("IsActive Disconnected?"); }
630 }
631
632 public bool IsLoggingOut
633 {
634 get { return false; }
635 set { }
636 }
637
638 public bool SendLogoutPacketWhenClosing
639 {
640 set { }
641 }
642
643 public uint CircuitCode
644 {
645 get { return (uint)Util.RandomClass.Next(0,int.MaxValue); }
646 }
647
648 public IPEndPoint RemoteEndPoint
649 {
650 get { return (IPEndPoint)m_client.Client.RemoteEndPoint; }
651 }
652
653#pragma warning disable 67
654 public event GenericMessage OnGenericMessage;
655 public event ImprovedInstantMessage OnInstantMessage;
656 public event ChatMessage OnChatFromClient;
657 public event TextureRequest OnRequestTexture;
658 public event RezObject OnRezObject;
659 public event ModifyTerrain OnModifyTerrain;
660 public event BakeTerrain OnBakeTerrain;
661 public event EstateChangeInfo OnEstateChangeInfo;
662 public event EstateManageTelehub OnEstateManageTelehub;
663 public event CachedTextureRequest OnCachedTextureRequest;
664 public event SetAppearance OnSetAppearance;
665 public event AvatarNowWearing OnAvatarNowWearing;
666 public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
667 public event RezMultipleAttachmentsFromInv OnRezMultipleAttachmentsFromInv;
668 public event UUIDNameRequest OnDetachAttachmentIntoInv;
669 public event ObjectAttach OnObjectAttach;
670 public event ObjectDeselect OnObjectDetach;
671 public event ObjectDrop OnObjectDrop;
672 public event StartAnim OnStartAnim;
673 public event StopAnim OnStopAnim;
674 public event LinkObjects OnLinkObjects;
675 public event DelinkObjects OnDelinkObjects;
676 public event RequestMapBlocks OnRequestMapBlocks;
677 public event RequestMapName OnMapNameRequest;
678 public event TeleportLocationRequest OnTeleportLocationRequest;
679 public event DisconnectUser OnDisconnectUser;
680 public event RequestAvatarProperties OnRequestAvatarProperties;
681 public event SetAlwaysRun OnSetAlwaysRun;
682 public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
683 public event TeleportCancel OnTeleportCancel;
684 public event DeRezObject OnDeRezObject;
685 public event Action<IClientAPI> OnRegionHandShakeReply;
686 public event GenericCall1 OnRequestWearables;
687 public event Action<IClientAPI, bool> OnCompleteMovementToRegion;
688 public event UpdateAgent OnPreAgentUpdate;
689 public event UpdateAgent OnAgentUpdate;
690 public event UpdateAgent OnAgentCameraUpdate;
691 public event AgentRequestSit OnAgentRequestSit;
692 public event AgentSit OnAgentSit;
693 public event AvatarPickerRequest OnAvatarPickerRequest;
694 public event Action<IClientAPI> OnRequestAvatarsData;
695 public event AddNewPrim OnAddPrim;
696 public event FetchInventory OnAgentDataUpdateRequest;
697 public event TeleportLocationRequest OnSetStartLocationRequest;
698 public event RequestGodlikePowers OnRequestGodlikePowers;
699 public event GodKickUser OnGodKickUser;
700 public event ObjectDuplicate OnObjectDuplicate;
701 public event ObjectDuplicateOnRay OnObjectDuplicateOnRay;
702 public event GrabObject OnGrabObject;
703 public event DeGrabObject OnDeGrabObject;
704 public event MoveObject OnGrabUpdate;
705 public event SpinStart OnSpinStart;
706 public event SpinObject OnSpinUpdate;
707 public event SpinStop OnSpinStop;
708 public event UpdateShape OnUpdatePrimShape;
709 public event ObjectExtraParams OnUpdateExtraParams;
710 public event ObjectRequest OnObjectRequest;
711 public event ObjectSelect OnObjectSelect;
712 public event ObjectDeselect OnObjectDeselect;
713 public event GenericCall7 OnObjectDescription;
714 public event GenericCall7 OnObjectName;
715 public event GenericCall7 OnObjectClickAction;
716 public event GenericCall7 OnObjectMaterial;
717 public event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily;
718 public event UpdatePrimFlags OnUpdatePrimFlags;
719 public event UpdatePrimTexture OnUpdatePrimTexture;
720 public event UpdateVector OnUpdatePrimGroupPosition;
721 public event UpdateVector OnUpdatePrimSinglePosition;
722 public event UpdatePrimRotation OnUpdatePrimGroupRotation;
723 public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation;
724 public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition;
725 public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation;
726 public event UpdateVector OnUpdatePrimScale;
727 public event UpdateVector OnUpdatePrimGroupScale;
728 public event StatusChange OnChildAgentStatus;
729 public event GenericCall2 OnStopMovement;
730 public event Action<UUID> OnRemoveAvatar;
731 public event ObjectPermissions OnObjectPermissions;
732 public event CreateNewInventoryItem OnCreateNewInventoryItem;
733 public event LinkInventoryItem OnLinkInventoryItem;
734 public event CreateInventoryFolder OnCreateNewInventoryFolder;
735 public event UpdateInventoryFolder OnUpdateInventoryFolder;
736 public event MoveInventoryFolder OnMoveInventoryFolder;
737 public event FetchInventoryDescendents OnFetchInventoryDescendents;
738 public event PurgeInventoryDescendents OnPurgeInventoryDescendents;
739 public event FetchInventory OnFetchInventory;
740 public event RequestTaskInventory OnRequestTaskInventory;
741 public event UpdateInventoryItem OnUpdateInventoryItem;
742 public event CopyInventoryItem OnCopyInventoryItem;
743 public event MoveInventoryItem OnMoveInventoryItem;
744 public event RemoveInventoryFolder OnRemoveInventoryFolder;
745 public event RemoveInventoryItem OnRemoveInventoryItem;
746 public event UDPAssetUploadRequest OnAssetUploadRequest;
747 public event XferReceive OnXferReceive;
748 public event RequestXfer OnRequestXfer;
749 public event ConfirmXfer OnConfirmXfer;
750 public event AbortXfer OnAbortXfer;
751 public event RezScript OnRezScript;
752 public event UpdateTaskInventory OnUpdateTaskInventory;
753 public event MoveTaskInventory OnMoveTaskItem;
754 public event RemoveTaskInventory OnRemoveTaskItem;
755 public event RequestAsset OnRequestAsset;
756 public event UUIDNameRequest OnNameFromUUIDRequest;
757 public event ParcelAccessListRequest OnParcelAccessListRequest;
758 public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest;
759 public event ParcelPropertiesRequest OnParcelPropertiesRequest;
760 public event ParcelDivideRequest OnParcelDivideRequest;
761 public event ParcelJoinRequest OnParcelJoinRequest;
762 public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
763 public event ParcelSelectObjects OnParcelSelectObjects;
764 public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
765 public event ParcelAbandonRequest OnParcelAbandonRequest;
766 public event ParcelGodForceOwner OnParcelGodForceOwner;
767 public event ParcelReclaim OnParcelReclaim;
768 public event ParcelReturnObjectsRequest OnParcelReturnObjectsRequest;
769 public event ParcelDeedToGroup OnParcelDeedToGroup;
770 public event RegionInfoRequest OnRegionInfoRequest;
771 public event EstateCovenantRequest OnEstateCovenantRequest;
772 public event FriendActionDelegate OnApproveFriendRequest;
773 public event FriendActionDelegate OnDenyFriendRequest;
774 public event FriendshipTermination OnTerminateFriendship;
775 public event GrantUserFriendRights OnGrantUserRights;
776 public event MoneyTransferRequest OnMoneyTransferRequest;
777 public event EconomyDataRequest OnEconomyDataRequest;
778 public event MoneyBalanceRequest OnMoneyBalanceRequest;
779 public event UpdateAvatarProperties OnUpdateAvatarProperties;
780 public event ParcelBuy OnParcelBuy;
781 public event RequestPayPrice OnRequestPayPrice;
782 public event ObjectSaleInfo OnObjectSaleInfo;
783 public event ObjectBuy OnObjectBuy;
784 public event BuyObjectInventory OnBuyObjectInventory;
785 public event RequestTerrain OnRequestTerrain;
786 public event RequestTerrain OnUploadTerrain;
787 public event ObjectIncludeInSearch OnObjectIncludeInSearch;
788 public event UUIDNameRequest OnTeleportHomeRequest;
789 public event ScriptAnswer OnScriptAnswer;
790 public event AgentSit OnUndo;
791 public event AgentSit OnRedo;
792 public event LandUndo OnLandUndo;
793 public event ForceReleaseControls OnForceReleaseControls;
794 public event GodLandStatRequest OnLandStatRequest;
795 public event DetailedEstateDataRequest OnDetailedEstateDataRequest;
796 public event SetEstateFlagsRequest OnSetEstateFlagsRequest;
797 public event SetEstateTerrainBaseTexture OnSetEstateTerrainBaseTexture;
798 public event SetEstateTerrainDetailTexture OnSetEstateTerrainDetailTexture;
799 public event SetEstateTerrainTextureHeights OnSetEstateTerrainTextureHeights;
800 public event CommitEstateTerrainTextureRequest OnCommitEstateTerrainTextureRequest;
801 public event SetRegionTerrainSettings OnSetRegionTerrainSettings;
802 public event EstateRestartSimRequest OnEstateRestartSimRequest;
803 public event EstateChangeCovenantRequest OnEstateChangeCovenantRequest;
804 public event UpdateEstateAccessDeltaRequest OnUpdateEstateAccessDeltaRequest;
805 public event SimulatorBlueBoxMessageRequest OnSimulatorBlueBoxMessageRequest;
806 public event EstateBlueBoxMessageRequest OnEstateBlueBoxMessageRequest;
807 public event EstateDebugRegionRequest OnEstateDebugRegionRequest;
808 public event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest;
809 public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest;
810 public event UUIDNameRequest OnUUIDGroupNameRequest;
811 public event RegionHandleRequest OnRegionHandleRequest;
812 public event ParcelInfoRequest OnParcelInfoRequest;
813 public event RequestObjectPropertiesFamily OnObjectGroupRequest;
814 public event ScriptReset OnScriptReset;
815 public event GetScriptRunning OnGetScriptRunning;
816 public event SetScriptRunning OnSetScriptRunning;
817 public event Action<Vector3, bool, bool> OnAutoPilotGo;
818 public event TerrainUnacked OnUnackedTerrain;
819 public event ActivateGesture OnActivateGesture;
820 public event DeactivateGesture OnDeactivateGesture;
821 public event ObjectOwner OnObjectOwner;
822 public event DirPlacesQuery OnDirPlacesQuery;
823 public event DirFindQuery OnDirFindQuery;
824 public event DirLandQuery OnDirLandQuery;
825 public event DirPopularQuery OnDirPopularQuery;
826 public event DirClassifiedQuery OnDirClassifiedQuery;
827 public event EventInfoRequest OnEventInfoRequest;
828 public event ParcelSetOtherCleanTime OnParcelSetOtherCleanTime;
829 public event MapItemRequest OnMapItemRequest;
830 public event OfferCallingCard OnOfferCallingCard;
831 public event AcceptCallingCard OnAcceptCallingCard;
832 public event DeclineCallingCard OnDeclineCallingCard;
833 public event SoundTrigger OnSoundTrigger;
834 public event StartLure OnStartLure;
835 public event TeleportLureRequest OnTeleportLureRequest;
836 public event NetworkStats OnNetworkStatsUpdate;
837 public event ClassifiedInfoRequest OnClassifiedInfoRequest;
838 public event ClassifiedInfoUpdate OnClassifiedInfoUpdate;
839 public event ClassifiedDelete OnClassifiedDelete;
840 public event ClassifiedDelete OnClassifiedGodDelete;
841 public event EventNotificationAddRequest OnEventNotificationAddRequest;
842 public event EventNotificationRemoveRequest OnEventNotificationRemoveRequest;
843 public event EventGodDelete OnEventGodDelete;
844 public event ParcelDwellRequest OnParcelDwellRequest;
845 public event UserInfoRequest OnUserInfoRequest;
846 public event UpdateUserInfo OnUpdateUserInfo;
847 public event RetrieveInstantMessages OnRetrieveInstantMessages;
848 public event PickDelete OnPickDelete;
849 public event PickGodDelete OnPickGodDelete;
850 public event PickInfoUpdate OnPickInfoUpdate;
851 public event AvatarNotesUpdate OnAvatarNotesUpdate;
852 public event MuteListRequest OnMuteListRequest;
853 public event AvatarInterestUpdate OnAvatarInterestUpdate;
854 public event PlacesQuery OnPlacesQuery;
855 public event FindAgentUpdate OnFindAgent;
856 public event TrackAgentUpdate OnTrackAgent;
857 public event NewUserReport OnUserReport;
858 public event SaveStateHandler OnSaveState;
859 public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest;
860 public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest;
861 public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest;
862 public event FreezeUserUpdate OnParcelFreezeUser;
863 public event EjectUserUpdate OnParcelEjectUser;
864 public event ParcelBuyPass OnParcelBuyPass;
865 public event ParcelGodMark OnParcelGodMark;
866 public event GroupActiveProposalsRequest OnGroupActiveProposalsRequest;
867 public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest;
868 public event SimWideDeletesDelegate OnSimWideDeletes;
869 public event SendPostcard OnSendPostcard;
870 public event MuteListEntryUpdate OnUpdateMuteListEntry;
871 public event MuteListEntryRemove OnRemoveMuteListEntry;
872 public event GodlikeMessage onGodlikeMessage;
873 public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate;
874
875#pragma warning restore 67
876
877 public int DebugPacketLevel { get; set; }
878
879 public void InPacket(object NewPack)
880 {
881
882 }
883
884 public void ProcessInPacket(Packet NewPack)
885 {
886
887 }
888
889 public void Close()
890 {
891 Close(false);
892 }
893
894 public void Close(bool force)
895 {
896 Disconnect();
897 }
898
899 public void Kick(string message)
900 {
901 Disconnect(message);
902 }
903
904 public void Start()
905 {
906 m_scene.AddNewAgent(this, PresenceType.User);
907
908 // Mimicking LLClientView which gets always set appearance from client.
909 AvatarAppearance appearance;
910 m_scene.GetAvatarAppearance(this, out appearance);
911 OnSetAppearance(this, appearance.Texture, (byte[])appearance.VisualParams.Clone(),appearance.AvatarSize, new WearableCacheItem[0]);
912 }
913
914 public void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args)
915 {
916 m_log.Info("[IRCd ClientStack] Completing Handshake to Region");
917
918 if (OnRegionHandShakeReply != null)
919 {
920 OnRegionHandShakeReply(this);
921 }
922
923 if (OnCompleteMovementToRegion != null)
924 {
925 OnCompleteMovementToRegion(this, true);
926 }
927 }
928
929 public void Stop()
930 {
931 Disconnect();
932 }
933
934 public void SendWearables(AvatarWearable[] wearables, int serial)
935 {
936
937 }
938
939 public void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry)
940 {
941
942 }
943
944 public void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures)
945 {
946
947 }
948
949 public void SendStartPingCheck(byte seq)
950 {
951
952 }
953
954 public void SendKillObject(List<uint> localID)
955 {
956
957 }
958
959 public void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
960 {
961
962 }
963
964 public void SendChatMessage(
965 string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, UUID ownerID, byte source, byte audible)
966 {
967 if (audible > 0 && message.Length > 0)
968 IRC_SendChannelPrivmsg(fromName, message);
969 }
970
971 private void IRC_SendChannelPrivmsg(string fromName, string message)
972 {
973 SendCommand(":" + fromName.Replace(" ", "") + " PRIVMSG " + IrcRegionName + " :" + message);
974 }
975
976 public void SendInstantMessage(GridInstantMessage im)
977 {
978 // TODO
979 }
980
981 public void SendGenericMessage(string method, UUID invoice, List<string> message)
982 {
983
984 }
985
986 public void SendGenericMessage(string method, UUID invoice, List<byte[]> message)
987 {
988
989 }
990
991 public void SendLayerData(float[] map)
992 {
993
994 }
995
996 public void SendLayerData(int px, int py, float[] map)
997 {
998
999 }
1000
1001 public void SendWindData(Vector2[] windSpeeds)
1002 {
1003
1004 }
1005
1006 public void SendCloudData(float[] cloudCover)
1007 {
1008
1009 }
1010
1011 public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look)
1012 {
1013
1014 }
1015
1016 public void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourExternalEndPoint)
1017 {
1018
1019 }
1020
1021 public AgentCircuitData RequestClientInfo()
1022 {
1023 return new AgentCircuitData();
1024 }
1025
1026 public void CrossRegion(ulong newRegionHandle, Vector3 pos, Vector3 lookAt, IPEndPoint newRegionExternalEndPoint, string capsURL)
1027 {
1028
1029 }
1030
1031 public void SendMapBlock(List<MapBlockData> mapBlocks, uint flag)
1032 {
1033
1034 }
1035
1036 public void SendLocalTeleport(Vector3 position, Vector3 lookAt, uint flags)
1037 {
1038
1039 }
1040
1041 public void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint, uint locationID, uint flags, string capsURL)
1042 {
1043
1044 }
1045
1046 public void SendTeleportFailed(string reason)
1047 {
1048
1049 }
1050
1051 public void SendTeleportStart(uint flags)
1052 {
1053
1054 }
1055
1056 public void SendTeleportProgress(uint flags, string message)
1057 {
1058 }
1059
1060 public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance, int transactionType, UUID sourceID, bool sourceIsGroup, UUID destID, bool destIsGroup, int amount, string item)
1061 {
1062
1063 }
1064
1065 public void SendPayPrice(UUID objectID, int[] payPrice)
1066 {
1067
1068 }
1069
1070 public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
1071 {
1072
1073 }
1074
1075 public void SendAvatarDataImmediate(ISceneEntity avatar)
1076 {
1077
1078 }
1079
1080 public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
1081 {
1082
1083 }
1084
1085 public void ReprioritizeUpdates()
1086 {
1087
1088 }
1089
1090 public void FlushPrimUpdates()
1091 {
1092
1093 }
1094
1095 public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, int version, bool fetchFolders, bool fetchItems)
1096 {
1097
1098 }
1099
1100 public void SendInventoryItemDetails(UUID ownerID, InventoryItemBase item)
1101 {
1102
1103 }
1104
1105 public void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId)
1106 {
1107
1108 }
1109
1110 public void SendRemoveInventoryItem(UUID itemID)
1111 {
1112
1113 }
1114
1115 public void SendTakeControls(int controls, bool passToAgent, bool TakeControls)
1116 {
1117
1118 }
1119
1120 public void SendTaskInventory(UUID taskID, short serial, byte[] fileName)
1121 {
1122
1123 }
1124
1125 public void SendBulkUpdateInventory(InventoryNodeBase node)
1126 {
1127
1128 }
1129
1130 public void SendXferPacket(ulong xferID, uint packet, byte[] data)
1131 {
1132
1133 }
1134
1135 public void SendAbortXferPacket(ulong xferID)
1136 {
1137
1138 }
1139
1140 public void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit, int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent, float PriceObjectScaleFactor, int PriceParcelClaim, float PriceParcelClaimFactor, int PriceParcelRent, int PricePublicObjectDecay, int PricePublicObjectDelete, int PriceRentLight, int PriceUpload, int TeleportMinPrice, float TeleportPriceExponent)
1141 {
1142
1143 }
1144
1145 public void SendAvatarPickerReply(AvatarPickerReplyAgentDataArgs AgentData, List<AvatarPickerReplyDataArgs> Data)
1146 {
1147
1148 }
1149
1150 public void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle)
1151 {
1152
1153 }
1154
1155 public void SendPreLoadSound(UUID objectID, UUID ownerID, UUID soundID)
1156 {
1157
1158 }
1159
1160 public void SendPlayAttachedSound(UUID soundID, UUID objectID, UUID ownerID, float gain, byte flags)
1161 {
1162
1163 }
1164
1165 public void SendTriggeredSound(UUID soundID, UUID ownerID, UUID objectID, UUID parentID, ulong handle, Vector3 position, float gain)
1166 {
1167
1168 }
1169
1170 public void SendAttachedSoundGainChange(UUID objectID, float gain)
1171 {
1172
1173 }
1174
1175 public void SendNameReply(UUID profileId, string firstname, string lastname)
1176 {
1177
1178 }
1179
1180 public void SendAlertMessage(string message)
1181 {
1182 IRC_SendChannelPrivmsg("Alert",message);
1183 }
1184
1185 public void SendAgentAlertMessage(string message, bool modal)
1186 {
1187
1188 }
1189
1190 public void SendLoadURL(string objectname, UUID objectID, UUID ownerID, bool groupOwned, string message, string url)
1191 {
1192 IRC_SendChannelPrivmsg(objectname,url);
1193 }
1194
1195 public void SendDialog(string objectname, UUID objectID, UUID ownerID, string ownerFirstName, string ownerLastName, string msg, UUID textureID, int ch, string[] buttonlabels)
1196 {
1197
1198 }
1199
1200 public void SendSunPos(Vector3 sunPos, Vector3 sunVel, ulong CurrentTime, uint SecondsPerSunCycle, uint SecondsPerYear, float OrbitalPosition)
1201 {
1202
1203 }
1204
1205 public void SendViewerEffect(ViewerEffectPacket.EffectBlock[] effectBlocks)
1206 {
1207
1208 }
1209
1210 public void SendViewerTime(int phase)
1211 {
1212
1213 }
1214
1215 public void SendAvatarProperties(UUID avatarID, string aboutText, string bornOn, byte[] charterMember, string flAbout, uint flags, UUID flImageID, UUID imageID, string profileURL, UUID partnerID)
1216 {
1217
1218 }
1219
1220 public void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question)
1221 {
1222
1223 }
1224
1225 public void SendHealth(float health)
1226 {
1227
1228 }
1229
1230 public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
1231 {
1232
1233 }
1234
1235 public void SendBannedUserList(UUID invoice, EstateBan[] banlist, uint estateID)
1236 {
1237
1238 }
1239
1240 public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args)
1241 {
1242
1243 }
1244
1245 public void SendEstateCovenantInformation(UUID covenant)
1246 {
1247
1248 }
1249
1250 public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, uint covenantChanged, string abuseEmail, UUID estateOwner)
1251 {
1252
1253 }
1254
1255 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
1256 {
1257
1258 }
1259
1260 public void SendLandAccessListData(List<LandAccessEntry> accessList, uint accessFlag, int localLandID)
1261 {
1262
1263 }
1264
1265 public void SendForceClientSelectObjects(List<uint> objectIDs)
1266 {
1267
1268 }
1269
1270 public void SendCameraConstraint(Vector4 ConstraintPlane)
1271 {
1272
1273 }
1274
1275 public void SendLandObjectOwners(LandData land, List<UUID> groups, Dictionary<UUID, int> ownersAndCount)
1276 {
1277
1278 }
1279
1280 public void SendLandParcelOverlay(byte[] data, int sequence_id)
1281 {
1282
1283 }
1284
1285 public void SendParcelMediaCommand(uint flags, ParcelMediaCommandEnum command, float time)
1286 {
1287
1288 }
1289
1290 public void SendParcelMediaUpdate(string mediaUrl, UUID mediaTextureID, byte autoScale, string mediaType, string mediaDesc, int mediaWidth, int mediaHeight, byte mediaLoop)
1291 {
1292
1293 }
1294
1295 public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, UUID AssetFullID)
1296 {
1297
1298 }
1299
1300 public void SendConfirmXfer(ulong xferID, uint PacketID)
1301 {
1302
1303 }
1304
1305 public void SendXferRequest(ulong XferID, short AssetType, UUID vFileID, byte FilePath, byte[] FileName)
1306 {
1307
1308 }
1309
1310 public void SendInitiateDownload(string simFileName, string clientFileName)
1311 {
1312
1313 }
1314
1315 public void SendImageFirstPart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec)
1316 {
1317
1318 }
1319
1320 public void SendImageNextPart(ushort partNumber, UUID imageUuid, byte[] imageData)
1321 {
1322
1323 }
1324
1325 public void SendImageNotFound(UUID imageid)
1326 {
1327
1328 }
1329
1330 public void SendShutdownConnectionNotice()
1331 {
1332 // TODO
1333 }
1334
1335 public void SendSimStats(SimStats stats)
1336 {
1337
1338 }
1339
1340 public void SendObjectPropertiesFamilyData(ISceneEntity Entity, uint RequestFlags)
1341 {
1342
1343 }
1344
1345 public void SendObjectPropertiesReply(ISceneEntity entity)
1346 {
1347 }
1348
1349 public void SendAgentOffline(UUID[] agentIDs)
1350 {
1351
1352 }
1353
1354 public void SendAgentOnline(UUID[] agentIDs)
1355 {
1356
1357 }
1358
1359 public void SendSitResponse(UUID TargetID, Vector3 OffsetPos, Quaternion SitOrientation, bool autopilot, Vector3 CameraAtOffset, Vector3 CameraEyeOffset, bool ForceMouseLook)
1360 {
1361
1362 }
1363
1364 public void SendAdminResponse(UUID Token, uint AdminLevel)
1365 {
1366
1367 }
1368
1369 public void SendGroupMembership(GroupMembershipData[] GroupMembership)
1370 {
1371
1372 }
1373
1374 public void SendGroupNameReply(UUID groupLLUID, string GroupName)
1375 {
1376
1377 }
1378
1379 public void SendJoinGroupReply(UUID groupID, bool success)
1380 {
1381
1382 }
1383
1384 public void SendEjectGroupMemberReply(UUID agentID, UUID groupID, bool success)
1385 {
1386
1387 }
1388
1389 public void SendLeaveGroupReply(UUID groupID, bool success)
1390 {
1391
1392 }
1393
1394 public void SendCreateGroupReply(UUID groupID, bool success, string message)
1395 {
1396
1397 }
1398
1399 public void SendLandStatReply(uint reportType, uint requestFlags, uint resultCount, LandStatReportItem[] lsrpia)
1400 {
1401
1402 }
1403
1404 public void SendScriptRunningReply(UUID objectID, UUID itemID, bool running)
1405 {
1406
1407 }
1408
1409 public void SendAsset(AssetRequestToClient req)
1410 {
1411
1412 }
1413
1414 public void SendTexture(AssetBase TextureAsset)
1415 {
1416
1417 }
1418
1419 public virtual void SetChildAgentThrottle(byte[] throttle)
1420 {
1421
1422 }
1423
1424 public byte[] GetThrottlesPacked(float multiplier)
1425 {
1426 return new byte[0];
1427 }
1428
1429#pragma warning disable 0067
1430 public event ViewerEffectEventHandler OnViewerEffect;
1431 public event Action<IClientAPI> OnLogout;
1432 public event Action<IClientAPI> OnConnectionClosed;
1433#pragma warning restore 0067
1434
1435 public void SendBlueBoxMessage(UUID FromAvatarID, string FromAvatarName, string Message)
1436 {
1437 IRC_SendChannelPrivmsg(FromAvatarName, Message);
1438 }
1439
1440 public void SendLogoutPacket()
1441 {
1442 Disconnect();
1443 }
1444
1445 public ClientInfo GetClientInfo()
1446 {
1447 return new ClientInfo();
1448 }
1449
1450 public void SetClientInfo(ClientInfo info)
1451 {
1452
1453 }
1454
1455 public void SetClientOption(string option, string value)
1456 {
1457
1458 }
1459
1460 public string GetClientOption(string option)
1461 {
1462 return String.Empty;
1463 }
1464
1465 public void Terminate()
1466 {
1467 Disconnect();
1468 }
1469
1470 public void SendSetFollowCamProperties(UUID objectID, SortedDictionary<int, float> parameters)
1471 {
1472
1473 }
1474
1475 public void SendClearFollowCamProperties(UUID objectID)
1476 {
1477
1478 }
1479
1480 public void SendRegionHandle(UUID regoinID, ulong handle)
1481 {
1482
1483 }
1484
1485 public void SendParcelInfo(RegionInfo info, LandData land, UUID parcelID, uint x, uint y)
1486 {
1487
1488 }
1489
1490 public void SendScriptTeleportRequest(string objName, string simName, Vector3 pos, Vector3 lookAt)
1491 {
1492
1493 }
1494
1495 public void SendDirPlacesReply(UUID queryID, DirPlacesReplyData[] data)
1496 {
1497
1498 }
1499
1500 public void SendDirPeopleReply(UUID queryID, DirPeopleReplyData[] data)
1501 {
1502
1503 }
1504
1505 public void SendDirEventsReply(UUID queryID, DirEventsReplyData[] data)
1506 {
1507
1508 }
1509
1510 public void SendDirGroupsReply(UUID queryID, DirGroupsReplyData[] data)
1511 {
1512
1513 }
1514
1515 public void SendDirClassifiedReply(UUID queryID, DirClassifiedReplyData[] data)
1516 {
1517
1518 }
1519
1520 public void SendDirLandReply(UUID queryID, DirLandReplyData[] data)
1521 {
1522
1523 }
1524
1525 public void SendDirPopularReply(UUID queryID, DirPopularReplyData[] data)
1526 {
1527
1528 }
1529
1530 public void SendEventInfoReply(EventData info)
1531 {
1532
1533 }
1534
1535 public void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint)
1536 {
1537
1538 }
1539
1540 public void SendMapItemReply(mapItemReply[] replies, uint mapitemtype, uint flags)
1541 {
1542
1543 }
1544
1545 public void SendAvatarGroupsReply(UUID avatarID, GroupMembershipData[] data)
1546 {
1547
1548 }
1549
1550 public void SendOfferCallingCard(UUID srcID, UUID transactionID)
1551 {
1552
1553 }
1554
1555 public void SendAcceptCallingCard(UUID transactionID)
1556 {
1557
1558 }
1559
1560 public void SendDeclineCallingCard(UUID transactionID)
1561 {
1562
1563 }
1564
1565 public void SendTerminateFriend(UUID exFriendID)
1566 {
1567
1568 }
1569
1570 public void SendAvatarClassifiedReply(UUID targetID, UUID[] classifiedID, string[] name)
1571 {
1572
1573 }
1574
1575 public void SendClassifiedInfoReply(UUID classifiedID, UUID creatorID, uint creationDate, uint expirationDate, uint category, string name, string description, UUID parcelID, uint parentEstate, UUID snapshotID, string simName, Vector3 globalPos, string parcelName, byte classifiedFlags, int price)
1576 {
1577
1578 }
1579
1580 public void SendAgentDropGroup(UUID groupID)
1581 {
1582
1583 }
1584
1585 public void RefreshGroupMembership()
1586 {
1587
1588 }
1589
1590 public void SendAvatarNotesReply(UUID targetID, string text)
1591 {
1592
1593 }
1594
1595 public void SendAvatarPicksReply(UUID targetID, Dictionary<UUID, string> picks)
1596 {
1597
1598 }
1599
1600 public void SendPickInfoReply(UUID pickID, UUID creatorID, bool topPick, UUID parcelID, string name, string desc, UUID snapshotID, string user, string originalName, string simName, Vector3 posGlobal, int sortOrder, bool enabled)
1601 {
1602
1603 }
1604
1605 public void SendAvatarClassifiedReply(UUID targetID, Dictionary<UUID, string> classifieds)
1606 {
1607
1608 }
1609
1610 public void SendAvatarInterestUpdate(IClientAPI client, uint wantmask, string wanttext, uint skillsmask, string skillstext, string languages)
1611 {
1612
1613 }
1614
1615 public void SendParcelDwellReply(int localID, UUID parcelID, float dwell)
1616 {
1617
1618 }
1619
1620 public void SendUserInfoReply(bool imViaEmail, bool visible, string email)
1621 {
1622
1623 }
1624
1625 public void SendUseCachedMuteList()
1626 {
1627
1628 }
1629
1630 public void SendMuteListUpdate(string filename)
1631 {
1632
1633 }
1634
1635 public bool AddGenericPacketHandler(string MethodName, GenericMessage handler)
1636 {
1637 return true;
1638 }
1639
1640 #endregion
1641
1642 public void SendRebakeAvatarTextures(UUID textureID)
1643 {
1644 }
1645
1646 public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
1647 {
1648 }
1649
1650 public void SendGroupAccountingDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt)
1651 {
1652 }
1653
1654 public void SendGroupAccountingSummary(IClientAPI sender,UUID groupID, uint moneyAmt, int totalTier, int usedTier)
1655 {
1656 }
1657
1658 public void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID,int amt)
1659 {
1660 }
1661
1662 public void SendGroupVoteHistory(UUID groupID, UUID transactionID, GroupVoteHistory[] Votes)
1663 {
1664 }
1665
1666 public void SendGroupActiveProposals(UUID groupID, UUID transactionID, GroupActiveProposals[] Proposals)
1667 {
1668 }
1669
1670 public void SendChangeUserRights(UUID agentID, UUID friendID, int rights)
1671 {
1672 }
1673
1674 public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId)
1675 {
1676 }
1677
1678 public void SendAgentTerseUpdate(ISceneEntity presence)
1679 {
1680 }
1681
1682 public void SendPlacesReply(UUID queryID, UUID transactionID, PlacesReplyData[] data)
1683 {
1684 }
1685
1686 public void SendPartPhysicsProprieties(ISceneEntity entity)
1687 {
1688 }
1689
1690 }
1691}